4

У меня есть решение с папкой packages, проверенной в исходном элементе управления. Я изменил некоторые из проектов, чтобы использовать файл project.json, а не packages.config для определения зависимостей. Проекты - все нормально .csproj проектов, а не DNX .xproj проектов. Казалось, что все работает правильно, но после обновления пакета я заметил, что новая версия не была добавлена ​​в папку packages решения. Вместо этого он был добавлен в новую папку общих пакетов NuGet в папке профиля пользователя.Используйте папку с относительными пакетами решений с NuGet и project.json

Итак, вопрос в том, как заставить NuGet использовать папку решения packages, а не общую папку?

подходы я пытался до сих пор без успеха:

  • Добавление global.json файл в папку решения с указанием "packages": "packages"
  • Установка <add key="disableSourceControlIntegration" value="false" /> в

ответ

2

NuGet 3.2 добавлена ​​поддержка .nuget\nuget.config для определения общих глобальных пакетов с использованием переменной окружения, NUGET_PACKAGES. Вы можете установить полный путь к альтернативной глобальной папке пакетов, однако я обнаружил, что если вы просто установите переменную в «пакеты», то инструменты NuGet в Visual Studio будут относиться к ней как относительный путь в папке с вашим решением. Это позволило мне установить и восстановить пакеты NuGet с помощью папки packages решения.

К сожалению, строительные проекты тогда дали мне ошибки в Microsoft.NuGet.targets, не в состоянии найти пакеты NuGet. Свойство NugetPackagesDirectory в msbuild не похоже, что оно установлено. Чтобы обойти эту проблему, я добавил следующие строки в к C:\Program Files (x86)\MSBuild\Microsoft\NuGet\Microsoft.NuGet.props файла:

<PropertyGroup Condition="'$(NugetPackagesDirectory)' == ''"> 
    <NugetPackagesDirectory>$(SolutionDir)packages</NugetPackagesDirectory> 
</PropertyGroup> 

Это будет влиять на все решения на машине, так что альтернативой было бы добавить те же строки в каждом файле проекта или в файл пользовательского props в решении, которое вы импортируете в каждый проект. Это также может потребоваться и для серверов сборки.

Хотя это работает, недостатком является то, что папка пакетов имеет другую структуру, packages\<package_name>\<version>\ по сравнению с packages\<package_name>.<version>\, а старые или неиспользуемые версии пакетов не удаляются после их обновления или удаления. Ручная очистка каталога пакетов, а затем восстановление необходимых пакетов после любых изменений приведет к тому же.

Лично это чувствует себя действительно взломанным, так как требует установки глобальных настроек для чего-то, что должно быть установлено на основе каждого решения. В какой-то момент NuGet будет обновляться для поддержки каталогов пакетов решений с project.json, но пока вы можете использовать описанную выше работу или просто придерживаться packages.config.

+1

Другая альтернатива - передать '/ p: NuGetPackagesDirectory = c: \ my \ new \ dir \' в командной строке при вызове msbuild (при условии, что вы вызвали 'nuget restore -PackagesDirectory c: \ my \ new \ dir \ ' –

+0

« NuGet в какой-то момент будет обновляться, чтобы поддерживать каталоги пакетов решений с помощью 'project.json' ...» У вас случилась проблема GitHub или другой URL-адрес, который вы можете привести для этого? вокруг проблем GitHub от NuGet и ничего не мог найти об этом. – joshuapoehls