19

我正在尝试升级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 导致了问题。

任何帮助深表感谢!

4

7 回答 7

13

问题是另一个引用旧版本统一的 Microsoft dll。我发现这是偶然检查每个引用的 dll 的名称空间,并发现另一个包含具有“统一性”的名称空间的 dll。

更新:

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

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

我希望我能为那些也在为这个问题而烦恼的迷路的灵魂节省一天的时间...... :)

于 2014-01-20T20:42:49.077 回答
4

绑定重定向应指向正确的程序集版本。

对于您的情况,应该使用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 :

在此处输入图像描述

Unity 程序集2.1.505.2AssemblyFileVersionAssemblyVersion中指定了不同的版本。

CLR 正在使用AssemblyVersion并且AssemblyFileVersion被忽略,但 NuGet 正在使用AssemblyFileVersion

所以这就是为什么你有这个区别!

请使用AssemblyVersion

于 2014-11-26T11:07:10.293 回答
0

由于您的新问题是关于查找程序集上的现有依赖项,因此您可能会参考这个问题:

如何找到依赖于特定依赖项的特定版本的内容?

其中指使用Fuslogvw.exe

于 2014-01-20T20:57:56.183 回答
0

如果您有 resharper,您可以删除问题参考,构建,转到使用它的类(有错误)并让 resharper 为您修复它。

节省了四处奔波,但我很感激不是每个人都有更清晰的:D

于 2015-02-04T11:12:34.780 回答
0

概述: 这是某人的代码,我必须修复代码中的错误,因此他们为我提供了应用程序的 zip 文件。

我不知道发生了什么,为什么总是第一次运行我的代码,并且在重新启动应用程序(发布任何更改)后它开始抛出异常。论坛中提供了许多可能的解决方案,我责怪我的代码和数据库,然后开始撤消我所做的每一步。但这无济于事

解决方案: 由于多次故障排除无法解决此问题,但是当我重新启动调查每件事时,从 beaning 中找出导致异常的实际原因,我发现是

对于每个新版本,我的应用程序的 bin 文件夹都会删除 dll

那么解决方案是将这些 dll 粘贴到应用程序 bin 文件夹中并重建代码(参考屏幕截图)

结果:一切都过去了。

在此处输入图像描述

于 2018-03-25T06:41:14.273 回答
0

我无法通过在接受的解决方案中使用 EnterpriseLibrary 更新来更正它。我最终只是覆盖了app.config中的依赖程序集版本,您可以执行类似的操作来强制任何抱怨该版本的库使用另一个版本。

应用程序配置:

  <dependentAssembly>
    <assemblyIdentity name="Unity.Container" publicKeyToken="489B6ACCFAF20EF0" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.8.11.0" newVersion="5.8.11.0"/>
  </dependentAssembly>
于 2018-11-27T17:51:00.887 回答
-1

检查您的 app.config/web.config,当然还有您的项目参考。

于 2014-01-20T20:00:17.687 回答