【问题标题】:How to get a programmatic list of all loaded assemblies (referenced) in the .NET Compact Framework如何在 .NET Compact Framework 中获取所有已加载程序集(引用)的编程列表
【发布时间】:2009-06-02 17:39:39
【问题描述】:

我在 Windows CE 上运行并使用 Compact Framework。我需要获取我的应用程序已加载的所有参考程序集的列表。如果能够访问这些程序集的 AssemblyName(对象),那就太好了。

一个例子就像通过执行以下操作来获取我正在运行的程序集:Assembly.GetExecutingAssembly();除了我需要获取对所有其他加载的程序集(第 3 方 Dll)的引用。

完整的框架具有Assembly.GetExecutingAssembly().GetReferencedAssemblies() 方法,但它在 Compact Framework 上不可用。任何帮助将不胜感激。

【问题讨论】:

    标签: c# .net compact-framework assemblies windows-ce


    【解决方案1】:

    基于this,托管 dll 似乎并没有真正“加载”,因为它们在传统框架中。相反,IL 是内存映射的,而 JIT 只是在执行过程中获取所需的内容(无需为已执行但不再使用的代码维护大量内存)

    这可以解释为什么 CF 没有提供迭代加载的 dll 的方法。至于为什么它不允许迭代 referenced dlls 这是一个完全编译时间构造...

    作为一种可能的解决方法:
    使用GetExecutingAssembly 获取活动代码。确保这发生在您的可执行文件中,以便它获取根程序集。

    为清单编写一些能够解析 dll 的代码,指示哪些程序集被引用(这不需要是托管代码 - 微软提供的非托管自省 API 甚至可以为您执行此操作,并且 dll 格式规范既是公开的,也不可能在不久的将来彻底改变)。我建议从 GAC 加载黑名单 dll(尽管这可能是不必要的)。

    【讨论】:

      【解决方案2】:

      我想如果没有 API 可以做到这一点,你可以试试这个......

      记住,这不是一个好方法......

      1. 在 Windows CE 中查找 PInvoke 调用并调用它们以确定进程加载了哪些 dll。

      2. 然后遍历 dll 以检查它们是否具有 CLI 标头。或者您可以尝试将 dll 作为程序集加载,如果加载,则它是应用程序加载的 .NET 程序集。

      我知道这样做不是正确的方法,但这可能会奏效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        相关资源
        最近更新 更多