Обнаружены конфликты между разными версиями одной и той же зависимой сборки - app.config отличается от packages.config - PullRequest
0 голосов
/ 28 июня 2018

У меня есть решение с более чем 40 проектами. В большинстве этих проектов я использую System.Net.Http, который я установил через NuGet. На момент написания статьи мы установили v4.3.3 от Nuget. Это также то, что записано в packages.config

<package id="System.Net.Http" version="4.3.3" targetFramework="net47" />

Когда я заглядываю в свой app.config, я использую разные версии здесь. В некоторых моих конфигах версия указана как 4.1.1.2, в других - как 4.2.0.0. Думаю, это внутренние версии, но я считаю, что проводная установка одного и того же NuGet в двух разных проектах дает мне две разные внутренние версии.

Один app.config:

<dependentAssembly>
  <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />
</dependentAssembly>

Другой app.config:

<dependentAssembly>
 <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>

Я попытался понизить версию, а затем снова обновить ее в Nuget, чтобы обновить и package.config & app.config. И файлы обновляются. Но в одном app.config я получаю другую версию, чем в другой. С той же версией NuGet, установленной одновременно.

Что дает?

Я прочитал довольно много тем здесь на SO, но ни одна из них не имеет такой же проблемы. В большинстве случаев люди решают свои проблемы путем обновления до последней версии, которая здесь не помогает.

Я предполагаю, что у меня могут быть другие ссылки, которые вынуждают версию System.Net.Http к более старой версии для этого проекта, но есть ли способ подтвердить этот тезис? Кроме того, если это действительно так, то можно ли заставить весь проект работать с самой высокой общей версией вместо разных версий?

1 Ответ

0 голосов
/ 29 июня 2018

Обнаружены конфликты между разными версиями одной и той же зависимой сборки - app.config отличается от packages.config

Похоже, что Visual Studio 2017 поставляется с .NET 4.6.x-4.7.x System.Net.Http.dll с внутренней версией сборки 4.2.0, а последняя версия сборки Nuget Package - 4.1.2 для NetFX.

Автору этого пакета Microsoft необходимо выпустить обновленный пакет nuget с версией 4.2.0.0.

Текущий обходной путь - вероятно, измените bindingRedirect 4.1.1.2 на 4.2.0.0:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
  </dependentAssembly>      
</assemblyBinding>

В этом случае все dll используются из каталога расширений сборки, а не из Nuget.

Надеюсь, это поможет.

...