【问题标题】:Error: Could not load file or assembly 'Microsoft.Practices.ServiceLocation, Version=1.0.0.0错误:无法加载文件或程序集“Microsoft.Practices.ServiceLocation,版本=1.0.0.0
【发布时间】:2015-09-01 11:13:13
【问题描述】:

我收到此错误:

无法加载文件或程序集“Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

如果我的项目中已有 Microsoft.Practices.ServiceLocation 的另一个现有版本,如何使用程序集重定向绑定解决此问题?

【问题讨论】:

标签: c# .net wpf mvvm


【解决方案1】:

一种方法是重新编译所有 NuGet 包以使用相同版本的Microsoft.Practices.ServiceLocation。在务实的层面上,这是不切实际的:我们需要一种更简单的方法。

更好的方法是使用程序集绑定重定向。如果界面相同,这将非常有效。该解决方案已经过试验和测试,并在许多FTSE 公司中运行。

这就是 app.config 的样子:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

将目标版本调整为您已有的任何版本,通常为1.2.0.01.3.0.0

PublicKeyToken 必须与目标程序集匹配。您可以使用以下命令提取它:

sn.exe -T assembly.dll

例子:

C:\test>"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\sn.exe" -T  C:\svn\lib\TargetDll.dll

Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.17929
Copyright (c) Microsoft Corporation.  All rights reserved.

Public key token is ac3efa7c033c2bd5
c:\test>

其他获取PublicKeyToken的方式见Getting the PublicKeyToken of .Net assemblies

PublicKeyToken 不会随程序集版本而改变,例如如果程序集是v1.0.0.0v2.0.0.0,则相同。

【讨论】:

  • @Will,感谢您的编辑。我通常将免责声明放在“这是一个问答式问题”的开头,因为有人因为他们不明白发生了什么而投票反对我。
  • 是的,我也是这么想的。随意在 cmets 中这样做,顺便说一句!并考虑到有时自我回答的问题仍然值得投反对票,因为人们认为它们是糟糕的问题......
猜你喜欢
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多