Nuget предотвращает создание папки пакетов в решении

У меня есть решение, которое содержит два Project.

/Solution
    .sln
    .nuget.config
    /ProjectA
        .csproj
        .nuspec
    /ProejctB
        .csproj
        .nuspec

Когда я добавляю зависимость ProjectA через nuget.

введите здесь описание изображения

Структура проекта стала примерно такой:

/Solution
    .sln
    nuget.config
    /packages
         .nupkg
         /lib
             .dll
    /ProjectA
        .csproj
        .nuspec
        packages.config
    /ProejctB
        .csproj
        .nuspec

По сути, Visual Studio создает файл packages.config и помещает туда зависимость. И зависимость добавляется в папку /packages. Кроме того, содержимое .csproj изменяется. (Добавлена ​​ссылка, которая имеет относительный путь к dll внутри папки /packages.)

У меня два вопроса.

1- Внутри файла nuget.config я поместил следующую строку. Поэтому я ожидаю, что nuget будет использовать локальный репозиторий по умолчанию вместо создания папки /packages в решении. Как я могу предотвратить создание папки /packages в решении. Вместо этого я хотел бы использовать "%userprofile%\.nuget\packages".

<add key="globalPackagesFolder" value="%userprofile%\.nuget\packages" />

2- Когда я добавляю зависимость как пакет nuget. Тем не менее файл .csprj изменен, и связанный путь dll добавлен туда как ссылка с относительным путем. Это нормально? Недостаточно ли автоматически сгенерированного packages.config. Почему и этот файл обновляется.


person wasabi    schedule 18.07.2017    source источник
comment
Почему так важно, что внутри решения есть папка с пакетами?   -  person Goodbye StackExchange    schedule 18.07.2017
comment
Вместо того, чтобы иметь папку пакета в каждом решении, я думаю, что лучше иметь одну папку пакета в системе, и каждое решение может использовать эту папку. %userprofile%\.nuget\packages уже существует, поэтому я хотел бы его использовать.   -  person wasabi    schedule 18.07.2017
comment
Менеджер пакетов использует локальный кеш. Он скопирует библиотеки DLL в каждый каталог (поскольку разные проекты могут ссылаться на разные версии)   -  person Goodbye StackExchange    schedule 18.07.2017
comment
@melih.tt, я обновил свой ответ более подробно, вы можете проверить, работает ли он для вас. Если нет, пожалуйста, дайте мне знать последний статус после использования метода ниже.   -  person Leo Liu-MSFT    schedule 19.07.2017


Ответы (1)


1- Внутри файла nuget.config я поместил следующую строку. Поэтому я ожидаю, что nuget будет использовать локальный репозиторий по умолчанию вместо создания папки /packages в решении. Как я могу предотвратить создание папки /packages в решении. Вместо этого я хотел бы использовать «%userprofile%.nuget\packages».

Вы должны использовать следующие настройки в NuGet.Config:

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <config>
     <add key="repositoryPath" value="%userprofile%\.nuget\packages" />
   </config>
 </configuration>

Вы можете проверить результат теста на снимке экрана ниже, пакеты добавлены в папку «%userprofile%\.nuget\packages»:

введите описание изображения здесь

Примечание. Следите за тем, чтобы в имени файла использовались прописные и строчные буквы, и перезапустите VS после его добавления.

2- Когда я добавляю зависимость как пакет nuget. Тем не менее файл .csprj изменен, и связанный путь dll добавляется туда как ссылка с относительным путем. Это нормально? Недостаточно ли автоматически сгенерированного packages.config. Почему и этот файл обновляется.

Нет, потому что Package.config и HintPath в файле .csproj имеют разные роли. Package.config используется NuGet для управления пакетами, а HintPath в .csproj используется Visual Studio для ссылки на путь к файлу Dll. Оба файла необходимо обновить, иначе Visual Studio выдаст ошибку «Не удается найти ссылку...».

person Leo Liu-MSFT    schedule 18.07.2017
comment
Это сработало для меня, спасибо, единственное, чего мне здесь не хватало, это как добавить папку .nuget через Visual Studio, а не через проводник. - person Venkataramana Madugula; 03.09.2020