【发布时间】:2018-10-14 15:10:27
【问题描述】:
我试图获取程序集列表。但是我在portable UWP 项目中遇到了一个异常。
以下代码适用于
.netframework
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
Xamarin portable
var currentdomain = typeof(string).GetTypeInfo().Assembly.GetType("System.AppDomain").GetRuntimeProperty("CurrentDomain").GetMethod.Invoke(null, new object[] { });
var getassemblies = currentdomain.GetType().GetRuntimeMethod("GetAssemblies", new Type[] { });
var assemblies = getassemblies.Invoke(currentdomain, new object[] { }) as Assembly[];
但上述相同的代码在 UWP portable 中不起作用。 (我认为便携式设备也在 UWP 中工作)
我在打第一行时遇到以下问题
'typeof(string).GetTypeInfo().Assembly.GetType("System.AppDomain").GetRuntimeProperty("CurrentDomain").GetMethod.Invoke(null, new object[] { })' 抛出类型异常'System.InvalidOperationException'
数据:{System.Collections.ListDictionaryInternal} H结果:-2146233079 帮助链接:空 内部异常:空 消息:“API 'System.AppDomain.get_CurrentDomain()' 不能在当前平台上使用。有关更多信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=248273。” 资料来源:“mscorlib” StackTrace: " 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo 文化)\r\n 在 System.Reflection.MethodBase.Invoke(Object obj, Object[] 参数) "
如果我使用下面的代码
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
Assembly[] assembly = ((dynamic)Thread.GetDomain()).GetAssemblies() as Assembly[];
var loadedAssemblies = ((dynamic)Thread.GetDomain()).GetAssemblies() as Assembly[];
然后我得到以下错误。
当前上下文中不存在名称“AppDomain”
当前上下文中不存在名称“线程”
当前上下文中不存在名称“线程”
我检查了Is there an alternative to AppDomain.GetAssemblies on portable library?,但这无助于解决我的问题。
【问题讨论】:
-
PCL 正式死亡。 .NET Standard 2.0 已经有了相关的 API。
-
@LexLi 如何通过 .NET Standard 获得它
标签: c# xamarin uwp portable-class-library