Nuget найти ссылку в папке пакета, но добавить его из другого - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю над добавлением нового проекта к существующему решению в ASP.NET MVC.Все идет хорошо, пока я не обновлю один из пакетов.Я обнаружил, что ссылка на «System.Net.Http» указывает на другое местоположение, чем я хотел.Вот так выглядит объектный браузер. У меня есть 3 сборки System.Net.Http в разных местах:

  • C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \v4.6.2 \ System.Net.Http.dll (4.0.0.0)
  • C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions\ net461 \ lib \ System.Net.Http.dll (4.2.0.0)
  • C: \ MyProject \ packages (4.1.1.1)

Когда я пытался переустановить пакетчерез Nuget я получил сообщение в консоли вывода:

Found package 'System.Net.4.3.2' already exists in folder 'C:\MyProject\packages'

Но когда я посмотрел в ссылках проекта, путь был к «C: \ Program Files (x86) \ Microsoft Visual ...».

Может ли кто-нибудь объяснить мне, почему это происходит?Почему Нугет говорит, что он находит пакет в определенной папке, но добавляет ссылку на другую?Кроме того, как заставить его добавить ссылки из "пакетов", если он найдет их там?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Может ли кто-нибудь объяснить мне, почему это происходит?Почему Нугет говорит, что он находит пакет в определенной папке, но добавляет ссылку на другую?Кроме того, как заставить его добавить ссылки из "пакетов", если он найдет их там?

Это потому, что .NET Framework поддерживает .NET Standard 2.0 начиная с 4.6.1,

эти пакеты (System.net, System.Threading.Tasks.DataFlow и т. д.) имеют сборку netstandard2.0.Когда в настольном проекте есть ссылка на сборку netstandard2.0, команда nuget автоматически добавляет все сборки, необходимые для ее работы: больше нет ссылок на пакеты .Когда команда nuget добавляет более новый System.Net.Http.dll, чем тот, который вы использовали ранее, поскольку он является частью netstandard2.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.1.1.1" />
  </dependentAssembly>      
</assemblyBinding>

Вы можете проверить следующие темы для получения более подробной информации:

System.Net.Http v4.2.0.0 копируется / загружается из MSBuild tooling

Проблемы с .NET Standard 2.0 с .NET Framework & NuGet

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

0 голосов
/ 17 декабря 2018

Кажется, DLL может быть добавлена ​​вручную.

Вы должны попытаться переустановить все свои NuGet:

Update-Package -reinstall -ProjectName <yourproject>

Но убедитесь, что ваше решение обновлено, и выне изменяйте контроль версий GIT / SVN, поскольку он может многое изменить.

...