便携式项目上是否有AppDomain.GetAssemblies的替代方案?

我试图获得程序集列表。 但我在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’的exception。出现InvalidOperationException”
数据:{System.Collections.ListDictionaryInternal} HResult:-2146233079 HelpLink:null InnerException:null消息:“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,对象[]参数)“

如果我使用以下代码

 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); Assembly[] assembly = ((dynamic)Thread.GetDomain()).GetAssemblies() as Assembly[]; var loadedAssemblies = ((dynamic)Thread.GetDomain()).GetAssemblies() as Assembly[]; 

然后我得到以下错误。

当前上下文中不存在名称“AppDomain”

当前上下文中不存在名称“Thread”

当前上下文中不存在名称“Thread”

我检查了便携式库上是否有AppDomain.GetAssemblies的替代品? ,但这无法解决我的问题。

首先,.NET标准库是可移植类库(PCL)的替代品。 请参阅Xamarin.Forms中的.NET Standard 2.0支持 。 您可以使用以下代码获取UWP应用程序包中的所有程序集,

 private async Task> GetAssemblyListAsync() { var PackageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; List assemblies = new List(); foreach (StorageFile file in await PackageFolder.GetFilesAsync()) { if (file.FileType == ".dll" || file.FileType == ".exe") { AssemblyName name = new AssemblyName() { Name = file.Name }; Assembly asm = Assembly.Load(name); assemblies.Add(asm); } } return assemblies; } 

但是,从.Net standard 2.0,您可以直接在UWP应用程序中使用AppDomain.GetAssemblies来获取程序集。

 Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); 

您需要下载Visual Studio 2017 15.4或更高版本并设置您的应用目标版本和最低版本Windows 10 Fall Creators Update(16299)。 此外,您还可以创建.Net Standard 2.0类库以使用AppDomain.GetAssemblies

在此处输入图像描述

 Windows.UI.Xaml.Application.Current.GetType().GetTypeInfo().Assembly;