Заставить приложение использовать версию библиотеки NuGet вместо GAC - PullRequest
0 голосов
/ 20 мая 2018

У меня консольное приложение для .NET 4.6 с зависимостью от пакета NuGet System.Net.Http v2.0.20126.16343.Все работало очень хорошо, пока я не решил обновить установку Visual Studio до 15.7.1 (27703.2000) с 15.2 (26430.14) из-за уведомлений.

После обновления мое приложение не может быть скомпилировано, и я получаю отсутствующийссылка на System.Net.Http, хотя пакет существует.Если я удаляю и снова добавляю пакет, Visual Studio ссылается на библиотеку из GAC, а не на папку пакетов.

Единственный способ добиться успешного построения приложения, если я обновлю пакет System.Net.Http доv4.3.3, но сейчас я не смогу обновить какие-либо пакеты NuGet из-за ограничений, не зависящих от меня.Я также не смогу удалить Visual Studio и вернуться к v15.2 из-за внешних ограничений.

Есть ли способ, как я могу это исправить и остаться на v2.0.20126 System.Net.Http при использовании VS 15.7.1?

Благодарим вас за помощь!

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Заставить приложение использовать версию библиотеки NuGet вместо GAC

Это потому, что ваше консольное приложение нацелено на .NET 4.6.Пакет nuget используется для .NET 4.0 (<4.5), где <code>System.Net.Http не существует.Когда ваше приложение настроено на .NET Framework 4.5+, оно просто перенаправит на System.Net.Http, который является частью платформы.

Это разработано в приложениях, работающих на .NET Framework 4.5 +.

ТакДля решения этой проблемы вы можете переключить свой проект на профиль .NET 4.0:

  1. Переключить мой проект на профиль .NET 4.0.
  2. Деинсталлированный пакет NuGet Web API.
  3. Снова установленный пакет NuGet Web API (бета).
  4. Проверено, что файл .csproj содержит для ВСЕХ сборок, на которые имеются ссылки, поэтому он всегда будет брать его из папки Bin, а не GAC.

Сертифицировано: Не удалось загрузить файл или сборку 'System.Net.Http, версия = 2.0.0.0 в MVC4 Web API

Если вы делаетеЕсли вы не хотите, чтобы переключил ваш проект на .NET 4.0, вы можете попробовать предложение magicandre1981: обновить этот пакет до 4.1.0 + , включая библиотеку .net 4.6.

Кроме того, вы можете обратиться к этой теме для получения более подробной информации.

Надеждаэто помогает.

0 голосов
/ 20 мая 2018

Добавьте app.config и добавьте AssemblyBinding для System.Net.Http :

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

(я не пробовал, посмотрите, еслиэто работает для вашей старой версии или нет)

Но этот пакет предназначен только для .net 4.0 и не имеет смысла для .net 4.6.Здесь последний 4.3.3 имеет библиотеку .net 4.6, которая добавляет новые функции.Поэтому обновление пакета Nuget до последней версии 4.3.3 будет лучшим решением.

...