【问题标题】:Get list of loaded Assemblies on UAP10 platform获取 UAP10 平台上加载的程序集列表
【发布时间】:2015-09-09 18:50:57
【问题描述】:

在面向 .NET Framework 4 的“普通”.NET 程序集上,我可以使用 AppDomain.CurrentDomain.GetAssemblies() 获取所有已加载程序集的列表。

如何在 Windows 通用应用程序或 CoreCLR 应用程序上执行此操作?

【问题讨论】:

    标签: c# win-universal-app coreclr


    【解决方案1】:

    一种做你想做的事情的方法是获取位于你的应用安装文件夹中的 DLL/程序集(可以假设在某些情况下正在使用/加载你的应用)。

        public static async Task<List<Assembly>> GetAssemblyList()
        {
            List<Assembly> assemblies = new List<Assembly>();
    
            var files = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFilesAsync();
            if (files == null)
                return assemblies;
    
            foreach (var file in files.Where(file => file.FileType == ".dll" || file.FileType == ".exe"))
            {
                try
                {
                    assemblies.Add(Assembly.Load(new AssemblyName(file.DisplayName)));
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                }
    
            }
    
            return assemblies;
         }
    

    然后循环它们你可以这样做:

    foreach (var assembly in GetAssemblyList().Result)
    {
       //Do something with it
    }
    

    感谢this reddit thread/user

    【讨论】:

    • 在 Debug 和 Release 中比较这个输出,看看你是否得到了你期望的所有信息。
    • 仅供参考,您可能找不到您要查找的所有 dll。这取决于 .NET Native Compiler 决定的“智能”程度。如果您没有任何直接的代码引用,它将折腾 dll(我们使用的是 MEF)。
    【解决方案2】:

    如何在 Windows 通用应用程序或 CoreCLR 应用程序上执行此操作?

    不,你不能。与Full.NET 相比,.NET for UWP 仅提供有限级别的反射功能。 在 .NET for UWP 中,您只能使用以下代码获取程序集信息。

    var assembly = this.GetType().GetTypeInfo().Assembly;
    

    【讨论】:

    • 我们是否可以使用任何资源来明确说明哪些 API 可用于 UWP?即使在开始引用 PCL 或 UWP 反射 API 时,只要我点击命名空间的其余部分,我就会被带到普通的 .NET 类。至少可以说,在没有任何警告的情况下冲向路障是令人沮丧的。
    【解决方案3】:

    在我们的例子中,我们可以使用 .NET Standard 中的AppDomain.CurrentDomain.GetAssemblies()

    唯一的问题是,如果没有对项目的直接代码引用,即使有项目引用,它也不会找到程序集。我们就是这种情况,因为我们使用 MEF 来做事。为了解决这个问题,我们只需设置一个虚拟代码引用。

    我喜欢“智能”编译器 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 2010-09-08
      相关资源
      最近更新 更多