便携式项目上是否有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;