无法加载文件或程序集“Microsoft.Practices.Unity”
我正在尝试将Unity
升级到版本(2.1.505.2),但是当我运行应用程序时,我得到以下FileLoadException
无法加载文件或程序集“Microsoft.Practices.Unity,Version = 2.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其依赖项之一。
我们正在从Unity 2.0.414.0升级到2.1.505.2。
- 引用Unity的解决方案中的所有项目引用都指向dll的正确版本
- Gac中没有引用Unity dll。 (通过检查
gacutil -l
双重检查) -
我从存档中删除了所有Unity dll。 用powershell双重检查
PS C:\> ls -rec -inc Microsoft.Practices.Unity.dll | foreach-object { "{0}`t{1}" -f $_.FullName, [System.Diagnostics.FileVersionInfo]::GetVersionInfo($_).FileVersion }
如何找出仍然引用Unity 2.0.414.0的内容?
FusionLogVw没有告诉我哪个DLL导致了这个问题。
任何帮助深表感谢!
问题是另一个微软dll引用旧版本的统一。 我发现这是偶然的,检查每个引用的dll的命名空间,并找到另一个包含“unity”的命名空间的dll。
更新:
- Microsoft.Practices.EnterpriseLibrary.Common
- Microsoft.Practices.EnterpriseLibrary.Validation
最新发布的版本解决了这个问题。
我希望我能节省一些失去灵魂的日子,他们也会在这个问题上拔掉头发…… 🙂
您应该将重定向添加到正确的程序集:
但请注意,版本2.1.505.0应该用于重定向!
由于下一个原因,您无法设置2.1.505.2 :
Unity程序集2.1.505.2包含AssemblyFileVersion和AssemblyVersion的不同版本。
CLR不关心AssemblyFileVersion,所以只使用AssemblyVersion! 而AssemblyFileVersion仅由nuget使用!
检查你的app.config / web.config,当然还有你的项目参考。
由于您的新问题是关于在程序集上查找现有依赖项,因此您可以参考以下问题:
如何找到取决于特定依赖项的特定版本的内容?
其中指的是使用Fuslogvw.exe
如果你有resharper,你可以删除问题引用,构建,转到使用它的类(有一个错误)并获得resharper来为你修复它。
节省faffing周围,但我感谢不是每个人都有resharper:D
概述:这是某人的代码我必须修复代码中的错误,所以他们为我提供了一个应用程序的zip文件。
我不知道发生了什么,为什么我的代码第一次运行,并且在重新启动应用程序(发布任何更改)后,它开始抛出exception。 在论坛中提供了许多可能的解决方案,我责备我的代码和数据库,然后开始撤消我做的每一步。 但这没有用
解决方案:由于多次故障排除无法解决这个问题,但是当我重新开始调查每一件事情时都会发现导致exception的实际原因,我发现是
对于每个新构建,我的应用程序的bin文件夹删除dll
然后解决方法是将这些dll粘贴到应用程序bin文件夹中并重建代码(参见截图)
结果 :一切都没了。