Подтвердить что ты не робот

Включить пакеты NuGet в TeamCity

Недавно я начал использовать NuGet для управления внешними пакетами. Пока что мне это нужно только для NLog. Все работает отлично, когда я создаю проект в VS 2012. Однако я пытаюсь использовать TeamCity как сервер CI (я довольно новичок в CI), и это дает мне следующую ошибку:

[Csc] SomeNamespace\SomeClass.cs(10, 7): error CS0246: 
The type or namespace name 'NLog' could not be found 
(are you missing a using directive or an assembly reference?)

(эта ошибка повторяется повсюду, где я использую NLog)

Теперь я не включил папку "packages/" в SVN, так как считал хорошей практикой не включать двоичные файлы и позволить MSBuild в TeamCity загружать их самостоятельно. Однако это явно не делает этого. Я включаю файл package.xml в SVN. Что я могу проверить, чтобы увидеть, что происходит не так?

Обновление Благодаря @DavidBrabant меня подтолкнули в правильном направлении. Однако теперь я получаю следующую ошибку в TeamCity:

Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, 
click on Package Manager node and check 'Allow NuGet to download missing packages during build.'

Однако я не в Visual Studio, а TeamCity, поэтому я не знаю, как установить "согласие" на true! Я попытался установить RestorePackages в "true" в файле NuGet.targets:

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

но это не сработало.

Обновление 2 Чтобы сделать это, я также установил следующее свойство NuGet.targets:

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>

Это сделало выполнение сборки успешным!

4b9b3361

Ответ 1

Функция восстановления встроенного пакета, встроенная в NuGet, позволяет вам очень легко настроить часть предварительной сборки рабочего процесса. Для этого щелкните правой кнопкой мыши по решению node в обозревателе решений Visual Studios и выберите параметр "Включить восстановление пакета NuGet". Обратите внимание, что в вашей системе необходимо установить расширение NuGet Visual Studio. Если вы это сделаете, и вы все еще не видите этот пункт меню, вы либо уже включили этот параметр, либо у вас есть папка с именем .nuget в каталоге решений.

После установки этой опции теперь вы можете удалить все подпапки в каталоге установки пакета, по умолчанию $(SolutionDir)\packages, за исключением файла repositories.config, и ваше решение должно все еще правильно компилироваться. Во время компиляции вы должны увидеть следы установки NuGet в окне вывода Visual Studio, и вы должны увидеть, что необходимые пакеты NuGet снова появятся в каталоге установки пакета.

Также см. Использование Nuget без пакетов.

Ответ 2

Просто повторить обновление 2. Если вы наткнулись на поиск быстрого решения TeamCity, не загружающего пакеты NuGet, попробуйте изменить эту строку

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

в эту строку

<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'true' ">false</RequireRestoreConsent>

в вашем файле NuGet.targets, и он должен работать.

Ответ 3

В TeamCity v8 мне удалось решить проблему "восстановить пакет", используя переменную среды в TC.

См:

http://johanleino.wordpress.com/2013/03/19/using-teamcity-for-asp-net-development-part-2/

и

http://confluence.jetbrains.com/display/TCD7/Configuring+Build+Parameters#ConfiguringBuildParameters-SystemPropertiesandEnvironmentVariables

Настройка env.EnableNuGetPackageRestore на "true" в качестве переменной среды на уровне проекта устранит проблему для всех конфигураций сборки. Чувствует себя немного лучше, чем редактирование файла NuGet.targets imho.