Где NuGet поместил dll?

Я пытаюсь обойти NuGet ограничения на контроль источника.

Для этого мне нужно узнать немного больше о том, как работает NuGet. Давайте рассмотрим простой пример. У меня есть проект, и я добавляю AutoMapper к нему. Когда я добавляю его, где должна быть помещена dll?

Я спрашиваю, потому что это не кажется последовательным. Иногда ссылка ищет dll в папке "Пакеты":

NuGet using packages path

и иногда он ищет в выходной папке Debug:

NuGet using Debug path

Но в обоих случаях строка AutoMapper в файле packages.config одинаков:

Первый пример:

<?xml version="1.0" encoding="utf-8"?>
<packages>  
  <package id="AutoMapper" version="1.1.0.118" />
  <package id="CommonServiceLocator" version="1.0" />
  <package id="Unity" version="2.1.505.0" />
</packages>

Второй пример:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="NSubstitute" version="1.1.0.0" />
  <package id="AutoMapper" version="1.1.0.118" />
  <package id="CommonServiceLocator" version="1.0" />
  <package id="Unity" version="2.1.505.0" />
</packages>

Итак, что контролирует, где он устанавливает ссылку? И как мне заставить его просто использовать расположение пакетов? (Когда он использует папку вывода Debug, эти ссылки терпят неудачу, если вы компилируете для "Release".)

Отмеченное замечание:. Я должен признать, что я нахожу NuGet классной идеей, но не готов ни к чему, кроме простых ситуаций. (Я подумываю о том, чтобы вернуться к созданию папки lib со всеми моими DLL в ней.)

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

Ответы

Ответ 1

Короткий ответ заключается в том, что если вы устанавливаете пакет NuGet из VS (используя PowerShell или диалог), любые сборки, которые он содержит, будут ссылаться из папки "Пакеты".

Обратите внимание, что VS имеет некоторое причудливое поведение, так что если вы пытаетесь построить и папка пакетов отсутствует, И DLL существует в папке bin, то она переключает ссылку, чтобы перейти в папку "bin". Может быть, это то, что вы видите?

Если это не так, и у вас есть воспроизводимый набор шагов, которые приводят к сбоям, на которые ссылаются NOT из папки "Пакеты", пожалуйста, откройте ошибку http://nuget.codeplex.com/. Спасибо!

Ответ 2

.NET CORE

В .NET Core пакеты nuget теперь хранятся в глобальном расположении, по умолчанию:

C:\Users\[User]\.nuget\packages

Кроме того, packages.config был удален со ссылками теперь хранится с использованием <PackageReference> элемента в .csproj файл


Если вы не можете найти глобальное местоположение, возможно, оно было изменено. Вы можете обнаружить это с помощью этой команды:

dotnet nuget locals global-packages --list

Если вы хотите изменить местоположение пакета, например, на e:\packages, вы можете использовать следующую команду

dotnet nuget config -Set globalPackagesFolder=e:\packages

Любые проблемы с установкой пакетов nuget, которые у меня были, всегда исправлялись путем очистки всех местоположений кэша (есть дополнительные места, где пакеты nuget сохраняются помимо глобального расположения), например так:

dotnet nuget locals all --clear

Ответ 3

Это помогает мне в этом вопросе

  • Удалить строку ниже в файле packages.config

    < package id="Microsoft.AspNet.WebApi.HelpPage" version="5.2.3" targetFramework="net45" />
    
  • Удалить папку "Area" - все файлы в ней

  • Установить пакет Nuget "PM > Install-Package Microsoft.AspNet.WebApi.HelpPage"