2014-01-20 343 views
15

我想升级到Unity版本(2.1.505.2),但是当我运行该应用程序我得到FileLoadException无法加载文件或程序集“Microsoft.Practices.Unity”

无法装入以下文件或程序集'Microsoft.Practices.Unity, Version = 2.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35' 或它的一个依赖关系。

我们从Unity 2.0.414.0升级到2.1.505.2。

  • 引用团结参考DLL
  • 有在GAC引用没有统一的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 } 
    

我怎样才能找出/谁仍然是指统一2.0.414.0?

FusionLogVw不会告诉我哪个DLL导致问题。

任何帮助非常感谢!

+0

的[未能加载文件或程序集或它的一个依赖]可能的复制(http://stackoverflow.com/questions/4469929/could -not-load-file-or-assembly-or-one-of-its-dependencies) – Matt

回答

11

问题是另一个微软的dll指的是旧版本的统一。我发现这是出乎意料的是检查每个引用的dll的名称空间,并发现另一个包含名为“unity”的dll。

更新:

  • Microsoft.Practices.EnterpriseLibrary.Common
  • Microsoft.Practices.EnterpriseLibrary.Validation

到最新发布的版本解决了这个问题。

我希望保存一天对于一些迷失的灵魂在那里谁也拉他的头发出过这个问题... :)

0

检查你的app.config/web.config,当然你的项目引用。

+0

已经完成了。我确信没有什么是指2.0.414。别的东西正在拉动这个依赖关系,运行时正在抱怨说,正如例外中提到的那样,它无法找到不再存在的程序集版本。 – bas

1

您应该添加重定向到正确装配:

但是请注意,版本2.1.505.0应该用于重定向!

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-2.1.505.0" newVersion="2.1.505.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

你不能设置2.1.505.2,因为下一个原因:

enter image description here

统一装配2.1.505.2包含不同版本的AssemblyFileVersion和的AssemblyVersion。

CLR不关心AssemblyFileVersion,所以只使用AssemblyVersion! 而AssemblyFileVersion仅由nuget使用!

0

如果你有resharper,你可以删除问题引用,构建,转到使用它的类(有错误),并让resharper为你解决它。

扑救faffing左右,但我明白不是每个人都有的ReSharper:d

相关问题