0

有一个问题请教.NET专家。

我有一组WinForms applications使用 dll 的一些子集(其中一些在这些应用程序之间共享)。所有二进制文件都位于同一目录中。我需要拆分那些 WinForms 应用程序并只获取具体应用程序所需的 dll。我怎样才能轻松做到这一点(需要快速的“5 分钟”解决方案)?

我考虑的选项:

  1. domain.ExecuteAssembly(@"exefilename"); 域.GetAssemblies(); //确定应用程序使用了哪些程序集。

    需要单线程单元属性或单独的线程。x86、x64 和 AnyCPU 版本存在问题。很多关于安全性、框架版本等的技巧。

    所以,我认为这不是一个“5 分钟”的解决方案,需要进行一些额外的调查。

  2. Assembly.GetReferencedAssemblies()

    具有 1 级限制(当程序集引用程序集而后者又引用另一个程序集时不起作用)。不适用于原始程序集加载(当您从文件中读取并通过 AppDomain.Load 方法加载时(字节 [],字节 []))

  3. Process.Modules(来自 System.Diagnostics)

    不适用于从 .NET 4 开始(这是针对此问题输入的 msft 连接错误)。对于 .NET 3.5 来说,这将是一个很棒的“5 分钟”解决方案,但我需要一个适用于 .NET 4.5 的解决方案。

  4. 只需执行应用程序并删除文件夹中的每个 dll。那些被使用的不会被删除(文件将被锁定)。但是,仍然不适用于原始程序集加载。

你还有其他建议吗?

4

1 回答 1

0

如果我没记错的话,IlDasm.exe 会递归地为您检查 DLL 依赖项。

于 2014-09-16T22:26:45.747 回答