我正在运行一段时间没有问题的项目,但最近开始抛出错误说明,
“无法加载文件或程序集”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);
因此,该等式中可能存在其他可能导致问题的变量(例如网络阻塞等)
我只是想确保在浪费时间走向错误的方向以获得答案之前,我可能不会错过任何东西,因为它过去了。
答案 0 :(得分:1)
请注意,这可能意味着许多事情,包括可以加载Microsoft.Practices.Unity
的一个依赖程序集。
首先搜索的是GAC,如果您在同一台机器上构建并运行,这可能不会导致问题,因为运行时也会找到相同的库,但如果您正在部署,项目有时会绑定到GAC库,而生产服务器可能没有安装它,它将无法运行。 CopyLocal=true
应该修复它,但如果要部署,则应检查库是否已复制到bin目录中。
其次,您应该使用反射器或Microsoft.Practices.Unity.dll
打开ilspy.exe
并查看它具有的其他依赖项(System.*
库除外),因为任何其他依赖项都需要与Microsoft.Practices.Unity
库相同的处理{1}}即添加到项目并将本地集复制为true。