我得到这个错误:
Could not load file or assembly ‘Microsoft.Practices.ServiceLocation,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
如果我的项目中已经有另一个现有版本的Microsoft.Practices.ServiceLocation,那么如何解决这个问题?
解决方法
一种方法是重新编译所有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.0或1.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.0或v2.0.0.0,它是一样的.