2013-06-17 5 views
26

У меня есть пакет на моем канале TeamCity NuGet, созданный TeamCity, но зависимый проект TC не может видеть его во время восстановления пакета.Восстановление пакета NuGet не может найти пакет, не имеет источника

[14:05:02] [Exec] E: \ TeamCity-BuildAgent \ работа \ 62023563850993a7 \ Web.nuget \ nuget.targets (88, 9): Не удалось найти версию '1.0.17.0' из пакет «MarkLogicManager40».

[14:05:02] [Exec] E: \ TeamCity-BuildAgent \ work \ 62023563850993a7 \ Web.nuget \ nuget.targets (88, 9): ошибка MSB3073: команда "" E: \ TeamCity- BuildAgent \ work \ 62023563850993a7 \ Web.nuget \ nuget.exe "установить" E: \ TeamCity-BuildAgent \ work \ 62023563850993a7 \ ProductMvc \ packages.config "-source" "-RequireConsent -solutionDir" E: \ TeamCity-BuildAgent \ work \ 62023563850993a7 \ Web \ "" завершался с кодом 1.

Обратите внимание, что параметр source в командной строке NuGet пуст. Может ли это быть причиной?

+0

Способ добавления настраиваемого фида NuGet к TeamCity [ранее был адресован] (http://stackoverflow.com/questions/14548324/how-to-add-the-custom-nuget-feed-to-teamcity-build) –

+0

Теперь я знаю ответ, я знаю вопрос. –

ответ

37

На сегодняшний день NuGet.targets имеет следующий способ определить пользовательский канал (ы):

<ItemGroup Condition=" '$(PackageSources)' == '' "> 
    <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used --> 
    <!-- The official NuGet package source (https://nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list --> 

    <PackageSource Include="https://nuget.org/api/v2/" /> 
    <PackageSource Include="\\MyShare" /> 
    <PackageSource Include="http://MyServer/" /> 
</ItemGroup> 

Другим вариантом является положить NuGet.config рядом с файлом решения:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
    <add key="MyShare" value="\\MyShare" /> 
    <add key="MyServer" value="http://MyServer" /> 
    </packageSources> 
    <activePackageSource> 
    <add key="All" value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 
+0

Использует ли nuget.exe (командная строка) информацию NuGet.targets? Я запускаю это .............. C: \ MyProgFiles \ NuGet \ NuGet.exe install ". \. Nuget \ packages.config" -ConfigFile ". \. Nuget \ nuget. config "-NoCache ............, и он находит пакет в общем репозитории, но не в моем приватном репозитории. Файл «\ .nuget \ NuGet.targets» существует и имеет дополнительный PackageSource (как видно в вашем сообщении). Но я продолжаю получать ошибки «Невозможно найти версию» (она существует) на пакете в частном репозитории. Спасибо за любую помощь. – granadaCoder

+1

@granadaCoder: использовать аргумент -Source. – abatishchev

+3

Спасибо. Я не знал, что вы можете предоставить несколько источников с разделителями с двумя двоеточиями. Для будущих читателей ::: -Source "https://www.nuget.org/api/v2/;http://myprivateserver/nuget/" – granadaCoder

8

По-видимому, пользовательские каналы NuGet устанавливаются не через что-либо в файлах решений или проектов, или nuget.config в решении, а в файле nuget.config в профиле разработчика.

Over on TeamCity не проверяет агент этого конфигурационного файла или записывает его, чтобы убедиться, что он содержит фид для самого сервера TeamCity.

Таким образом, восстановление пакета на TC с использованием пользовательской ленты TC не будет «просто работать». Вы должны тратить сотни фунтов денег клиента на погоню за хвостом, чтобы обнаружить все это, а затем установить/скопировать nuget.config из своего профиля в профиль учетной записи пользователя, на которой запущен агент сборки.

Ужасный.

+7

Чтобы заставить его работать с TeamCity с помощью проверенного исходного кода, вы можете добавить собственные источники пакетов в файл NuGet.targets. Другой способ - использовать пользовательский NuGet Installer runner в качестве шага сборки перед компиляцией решения. Не уверен, почему источники пакетов в файле NuGet.config игнорируются, предположительно, потому что пользовательский файл .targets не импортирует это или не читает. –

+0

Я переключил ответ, чтобы отразить лучший метод. –

Смежные вопросы