C# 错误:无法加载文件或程序集';Microsoft.Practices.ServiceLocation,版本=1.0.0.0

C# 错误:无法加载文件或程序集';Microsoft.Practices.ServiceLocation,版本=1.0.0.0,c#,.net,wpf,mvvm,C#,.net,Wpf,Mvvm,我得到这个错误: 无法加载文件或程序集“Microsoft.Practices.ServiceLocation,版本=1.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100) 如果我的项目中已有另一个现有版本的Microsoft.Practices.ServiceLocation,如何通过程序集重定向绑定解决此问题?一种方法是重新编译所有NuGet软件包以

我得到这个错误:

无法加载文件或程序集“Microsoft.Practices.ServiceLocation,版本=1.0.0.0,区域性=中性,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。(来自HRESULT的异常:0x8013100)


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

一种方法是重新编译所有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>
例如:

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的其他方法,请参阅


PublicKeyToken
不会随程序集版本而更改,例如,如果程序集是
v1.0.0
v2.0.0

@则相同,谢谢您的编辑。我通常会在一开始就声明“这是一个问答式的问题”,因为我已经有人投票否决了我,因为他们不明白发生了什么。是的,我也这么认为。顺便说一句,您可以在评论中自由地这样做!考虑到有时候自我回答的问题仍然是值得的,因为人们认为这些问题很糟糕……这个人解释得很好,看!
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>