我正在尝试创建一个Visual Studio AddIn,从当前解决方案中的项目中删除未使用的引用(我知道这可以完成,Resharper会这样做,但我的客户不想支付300个许可证)。 Anyhoo,我使用DTE循环遍历项目,编译它们的程序集,然后反映这些程序集以获取它们引用的程序集并交叉检查.csproj文件。
问题:因为装载了Reflection的.dll / .exe在app domian卸载之前没有卸载,所以它现在被锁定并且项目无法再次构建,因为VS尝试重新创建文件(所有标准的东西)。我已经尝试创建临时文件,然后反映它们......没有工作,仍然锁定原始文件(我完全不明白BTW)。现在我正在创建一个临时AppDomain来加载文件然后销毁。我在加载文件时遇到问题:
我理解AddDomain.Load的方式是我应该创建并发送程序集的字节数组。我这样做:
FileStream fs = new FileStream(assemblyFile, FileMode.Open);
byte[] assemblyFileBuffer = new byte[(int)fs.Length];
fs.Read(assemblyFileBuffer, 0, assemblyFileBuffer.Length);
fs.Close();
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ApplicationBase = assemblyFileInfo.Directory.FullName;
AppDomain tempAppDomain = AppDomain.CreateDomain("TempAppDomain", null, domainSetup);
Assembly projectAssembly = tempAppDomain.Load(assemblyFileBuffer);
最后一行抛出异常:
“无法加载文件或程序集'WindowsFormsApplication1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。”:“WindowsFormsApplication3,Version = 1.0。 0.0,Culture = neutral,PublicKeyToken = null“}”
任何帮助或想法将不胜感激。我的头不能靠在墙上击打......
谢谢, 丹
答案 0 :(得分:1)
这里几乎可以肯定的是,WindowsFormApplication1的一个依赖项在构造的AppDomain中不可用,因此它无法加载WindowsFormApplication1。为了告诉他们你将不得不检查融合绑定日志以查看发生了什么。这是一个很好的教程,介绍如何调试程序集绑定失败以检测其根本原因。
答案 1 :(得分:0)
我基本上都在尝试做同样的事情并遇到同样的问题。显然这不起作用。
http://blogs.msdn.com/brada/archive/2003/04/16/49974.aspx
我最终使用方法3,虽然它很难看: 见KB 837908