Ответ 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.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
см. Получение PublicKeyToken.Net-сборок.
PublicKeyToken
не изменяется в версии сборки, например. это то же самое, если сборка v1.0.0.0
или v2.0.0.0
.