繁体   English   中英

如何获取.NET Compact Framework中所有已加载程序集(引用)的编程列表

[英]How to get a programmatic list of all loaded assemblies (referenced) in the .NET Compact Framework

我在Windows CE上运行并使用Compact Framework。 我需要获取我的应用程序已加载的所有引用程序集的列表。 能够访问这些程序集的AssemblyName(对象)会很高兴。

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

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

基于 ,似乎托管的dll并不是真正的“加载”,因为它们处于传统框架中。 相反,IL是内存映射的,JIT只是抓住它所需要的东西(节省了必须为已执行但不再使用的代码维护内存负载)

这可以解释为什么CF无法迭代加载的dll。 至于为什么它不允许迭代引用的dll ,这是一个完全兼容的时间构造...

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

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

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

请记住,这不是一个很好的方法来做到这一点......

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM