有一个问题请教.NET
专家。
我有一组WinForms applications
使用 dll 的一些子集(其中一些在这些应用程序之间共享)。所有二进制文件都位于同一目录中。我需要拆分那些 WinForms 应用程序并只获取具体应用程序所需的 dll。我怎样才能轻松做到这一点(需要快速的“5 分钟”解决方案)?
我考虑的选项:
domain.ExecuteAssembly(@"exefilename"); 域.GetAssemblies(); //确定应用程序使用了哪些程序集。
需要单线程单元属性或单独的线程。x86、x64 和 AnyCPU 版本存在问题。很多关于安全性、框架版本等的技巧。
所以,我认为这不是一个“5 分钟”的解决方案,需要进行一些额外的调查。
Assembly.GetReferencedAssemblies()
具有 1 级限制(当程序集引用程序集而后者又引用另一个程序集时不起作用)。不适用于原始程序集加载(当您从文件中读取并通过 AppDomain.Load 方法加载时(字节 [],字节 []))
Process.Modules(来自 System.Diagnostics)
不适用于从 .NET 4 开始(这是针对此问题输入的 msft 连接错误)。对于 .NET 3.5 来说,这将是一个很棒的“5 分钟”解决方案,但我需要一个适用于 .NET 4.5 的解决方案。
只需执行应用程序并删除文件夹中的每个 dll。那些被使用的不会被删除(文件将被锁定)。但是,仍然不适用于原始程序集加载。
你还有其他建议吗?