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