错误:无法加载文件或程序集'Microsoft.Practices.ServiceLocation,Version = 1.0.0.0

Con*_*ngo 12 .net c# wpf mvvm

我收到此错误:

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

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

Con*_*ngo 8

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

更好的方法是使用程序集绑定重定向.如果界面相同,这非常好用.该解决方案经过了试验和测试,并在许多富时公司的生产中运行.

这就是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>
Run Code Online (Sandbox Code Playgroud)

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

PublicKeyToken必须在目标总成匹配.您可以使用以下命令将其解压缩:

sn.exe -T assembly.dll
Run Code Online (Sandbox Code Playgroud)

例:

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>
Run Code Online (Sandbox Code Playgroud)

有关获取的其他方法PublicKeyToken,请参阅获取.Net程序集的PublicKeyToken.

PublicKeyToken不与程序集版本的变化,例如其同样如果大会v1.0.0.0v2.0.0.0.