导致Microsoft.Practices.Unity程序集未加载的原因

本文关键字:加载 程序集 Microsoft Practices Unity 导致 | 更新日期: 2023-09-27 18:29:03

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

"无法加载文件或程序集"Microsoft.Practices.Unity,版本=2.1.505.0,区域性=中性,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);

因此,这个方程中可能有其他变量可以归因于问题(例如网络阻塞等)

我只是想确保我不会错过什么,在浪费时间朝着错误的方向寻找答案之前,先把它跑过SO。

导致Microsoft.Practices.Unity程序集未加载的原因

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

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

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