Не удалось загрузить файл или сборку 'Newtonsoft.Json, Version = 6.0.0.0 ... "во время выполнения, сборка косвенной зависимости продолжает искать старую версию - PullRequest
3 голосов
/ 23 мая 2019

У меня есть проект C #, который имеет прямую ссылку на Newtonsoft.Json и некоторые другие ссылки (который имеет косвенную ссылку на Newtonsoft.Json). Я хочу обновить версию Newtonsoft.Json с 6.0.8 до последней версии 12.0.2 во всех местах.

Изначально я получил, что справочная сборка не может быть решена, но после поиска я попытался поместить привязку в app.config, и теперь решение может быть успешно построено:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

И мой проект выглядит так:

<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
      <SpecificVersion>False</SpecificVersion>
      <Private>True</Private>
    </Reference>

Теперь проблема возникает при вызове библиотеки во время выполнения, она выдает следующую ошибку:

mymethod выдал исключение, попробует еще раз: не удалось загрузить файл или сборку 'Newtonsoft.Json, версия = 6.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed' или одна из ее зависимостей. Система не может найти указанный файл. "

При использовании AsmSpy кажется, что косвенные ссылки являются основной причиной:

Ссылка: Newtonsoft.Json, версия = 6.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed Newtonsoft.Json, версия = 6.0.0.0, культура = нейтральная, PublicKeyToken = 30ad4fe6b2a6aeed Источник: NotFound 6.0.0.0 от Microsoft.Azure.KeyVault, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 6.0.0.0 от Microsoft.Azure.KeyVault.WebKey, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 6.0.0.0 от Microsoft.Rest.ClientRuntime, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 6.0.0.0 от Microsoft.Rest.ClientRuntime.Azure, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35

При включении вывода диагностического проекта все выглядит нормально при сборке:

2>  Unified primary reference "Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Azure.KeyVault.2.0.6\lib\net45\Microsoft.Azure.KeyVault.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Azure.KeyVault.WebKey.2.0.4\lib\net45\Microsoft.Azure.KeyVault.WebKey.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Rest.ClientRuntime.2.3.2\lib\net45\Microsoft.Rest.ClientRuntime.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Using this version instead of original version "6.0.0.0" in "F:\packages\Microsoft.Rest.ClientRuntime.Azure.3.3.1\lib\net45\Microsoft.Rest.ClientRuntime.Azure.dll" because AutoUnify is 'true'. (TaskId:19)
2>      Resolved file path is "F:\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll". (TaskId:19)
2>      Reference found at search path location "{HintPathFromItem}". (TaskId:19)
2>      Found related file "F:\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.xml". (TaskId:19)
2>      The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:19)

Затем я попытался обновить все эти 4 пакета nuget до последней версии и переустановить пакеты в моем решении, очистить решение и перестроить, повторить попытку, но все равно не получилось.

У кого-нибудь когда-нибудь возникала такая же проблема и как ее решить?

...