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

时间:2016-01-04 12:58:57

标签: c# asp.net .net .net-assembly

我正在运行一段时间没有问题的项目,但最近开始抛出错误说明,

  

“无法加载文件或程序集”Microsoft.Practices.Unity,   Version = 2.1.505.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'   或其中一个依赖项。系统找不到该文件   指定“。

我看到这个程序集用于IoC /依赖注入支持但是我从未明确地将它添加到解决方案中;虽然我确实看到它实际上存在。

当我检查程序集的版本时,它显示的是上述错误中引用的相同版本;所以我无法弄清楚为什么项目无法找到该文件。

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

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

我能找到解决问题的唯一其他线索是程序集的目标运行时框架是v2.0.50727,这个应用程序是.NET 4.5

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

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

long memberId = 1326728123;
ServiceClient sc = new ServiceClient("ServiceClientEndPoint");
var leadPackage = smc.GetLeadPackages(memberId);

因此,该等式中可能存在其他可能导致问题的变量(例如网络阻塞等)

我只是想确保在浪费时间走向错误的方向以获得答案之前,我可能不会错过任何东西,因为它过去了。

1 个答案:

答案 0 :(得分:1)

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

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

其次,您应该使用反射器或Microsoft.Practices.Unity.dll打开ilspy.exe并查看它具有的其他依赖项(System.*库除外),因为任何其他依赖项都需要与Microsoft.Practices.Unity库相同的处理{1}}即添加到项目并将本地集复制为true。