Ошибка: не удалось загрузить файл или сборку "Microsoft.Practices.ServiceLocation, Version = 1.0.0.0

Я получаю эту ошибку:

Не удалось загрузить файл или сборку "Microsoft.Practices.ServiceLocation, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35" или одна из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Как мне разрешить это с привязкой перенаправления сборки, если у меня уже есть другая существующая версия Microsoft.Practices.ServiceLocation в моем проекте?

Ответ 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.