无法加载文件或程序集“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文件夹中并重建代码(参见截图)

结果 :一切都没了。

在此处输入图像描述