C# 是什么导致Microsoft.Practices.Unity程序集无法加载?

C# 是什么导致Microsoft.Practices.Unity程序集无法加载?,c#,asp.net,.net,.net-assembly,C#,Asp.net,.net,.net Assembly,我正在运行一个项目,该项目已经运行了一段时间,但最近开始抛出一个错误声明 无法加载文件或程序集“Microsoft.Practices.Unity”, 版本=2.1.505.0,区域性=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到该文件 指定的。” 我知道这个程序集是为了支持IoC/依赖注入,但是我从来没有明确地将它添加到解决方案中;虽然我确实看到它确实在那里 当我检查程序集的版本时,它显示的版本与上述错误中引用的版本相同;因此,我无法理解为

我正在运行一个项目,该项目已经运行了一段时间,但最近开始抛出一个错误声明

无法加载文件或程序集“Microsoft.Practices.Unity”, 版本=2.1.505.0,区域性=中性,PublicKeyToken=31bf3856ad364e35' 或其依赖项之一。系统找不到该文件 指定的。”

我知道这个程序集是为了支持IoC/依赖注入,但是我从来没有明确地将它添加到解决方案中;虽然我确实看到它确实在那里

当我检查程序集的版本时,它显示的版本与上述错误中引用的版本相同;因此,我无法理解为什么项目找不到该文件

为了解决这个问题,我清理了解决方案,删除了我的obj文件夹,重新构建、删除甚至通过nuget重新安装了程序集,但问题依然存在

我在这里发现了一些类似的问题,但建议的解决方案要么不适用,因为它与我遇到问题的程序集引用不同,要么涉及基于XAML的应用程序的配置。这是ASP.NET

至于我为什么会遇到这个问题,我能找到的唯一其他线索是程序集的目标运行时框架是v2.0.50727,而这个应用程序是.NET 4.5

从我有限的角度来看,这似乎是对问题的合理解释,除了应用程序以前运行时没有问题

我还要提到的是,程序集不是从抛出错误的代码块显式调用的;这只是创建一个web服务客户端并调用一个方法

long memberId = 1326728123;
ServiceClient sc = new ServiceClient("ServiceClientEndPoint");
var leadPackage = smc.GetLeadPackages(memberId);
因此,这个等式中可能还有其他变量导致了这个问题(例如,网络阻塞等)


我只是想在浪费时间朝错误的方向寻找答案之前,通过运行它来确保我没有遗漏任何东西。

请注意,这可能意味着很多事情,包括可以加载Microsoft.Practices.Unity的一个依赖程序集

搜索的第一个位置是GAC,如果您在同一台机器上构建和运行,这可能不会导致问题,因为运行时也会找到相同的库,但如果您正在部署,项目有时会绑定到GAC库,而生产服务器可能没有安装它,并且无法运行
CopyLocal=true
应该可以解决这个问题,但是如果您正在部署,应该检查库是否已复制到bin目录中


其次,您应该使用reflector或ilspy.exe打开
Microsoft.Practices.Unity.dll
,查看它有哪些其他依赖项(除了
系统。*
库)由于任何其他对象都需要与Microsoft.Practices.Unity相同的处理,即添加到项目中并将本地集复制为true。

在引用的属性中,是否设置了
CopyLocal=true
?是的,它似乎设置为CopyLocal=true这可能有助于使用“程序集绑定日志查看器”(Fuslogvw)。它将向您显示它试图加载的内容、查找DLL的位置、每个DLL被拒绝的原因等,并且它已随Visual Studio一起安装。。。谢谢,我将查看程序集绑定日志Viewer@Marshal似乎关闭VS,重新启动然后重新打开解决方案解决了问题;这太棒了,所以谢谢你给我指了指链接,因为这是我没有考虑过的一件事。不幸的是,我仍然不知道为什么这会解决问题。有决心很好,但有一个我想我现在永远也不会知道的逻辑答案更有利。@Mark:没错。我猜可能是VS在关闭时释放了资源,并在启动时获得了新的资源。但知道确切的原因总是好的,而不仅仅是决议。