Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取.NET Compact Framework中所有已加载程序集(引用)的编程列表_C#_.net_Compact Framework_Assemblies_Windows Ce - Fatal编程技术网

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

C# 如何获取.NET Compact Framework中所有已加载程序集(引用)的编程列表,c#,.net,compact-framework,assemblies,windows-ce,C#,.net,Compact Framework,Assemblies,Windows Ce,我在Windows CE上运行并使用Compact框架。我需要获取应用程序已加载的所有引用程序集的列表。如果能够获得这些程序集的AssemblyName(对象),那就太好了 例如,通过执行以下操作获取正在运行的程序集:assembly.getExecutionGassembly();除了我需要获得所有其他加载程序集(第三方DLL)的引用之外 完整框架具有该方法,但在紧凑框架上不可用。任何帮助都将不胜感激。我想如果没有API,您可以尝试一下 记住,这不是一个好方法来做这件事 在Windows CE

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

例如,通过执行以下操作获取正在运行的程序集:assembly.getExecutionGassembly();除了我需要获得所有其他加载程序集(第三方DLL)的引用之外


完整框架具有该方法,但在紧凑框架上不可用。任何帮助都将不胜感激。

我想如果没有API,您可以尝试一下

记住,这不是一个好方法来做这件事

  • 在Windows CE中查找PInvoke调用,并调用这些调用以确定进程加载了哪些DLL

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

  • 我知道这不是一个正确的方法,但这可能会起作用。

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

    这将解释为什么CF无法在加载的dll上进行迭代。至于为什么它不允许迭代引用的DLL,它们是完全复杂的时间结构

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

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