Где NuGet положил dll? - PullRequest
       34

Где NuGet положил dll?

29 голосов
/ 11 августа 2011

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

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

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

NuGet using packages path

и иногда он ищет в папке вывода отладочной сборки:

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 со всеми своими библиотеками в ней.)

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

Ответы [ 3 ]

34 голосов
/ 01 марта 2018

.NET CORE

В .NET 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
20 голосов
/ 11 августа 2011

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

Обратите внимание, что VS ведет себя немного странно, например, если вы пытаетесь собрать, а папка пакетов отсутствует, а DLL находится в папке bin, тогда она переключает ссылку для перехода в папку 'bin'. Может быть, это то, что вы видите?

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

1 голос
/ 23 мая 2016

Это помогает мне решить эту проблему

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

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

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

...