Восстановление пакета Nuget не работает в TFS 2015

Восстановление пакета Nuget вообще не работает для нас с TFS 2015 RC2 и сервером сборки с Visual Studio 2015. У меня есть задача сборки Visual Studio с установленным флажком «Восстановить пакеты Nuget», но этот шаг не выполняет никакого восстановления перед запуском сборки. , который затем терпит неудачу. Нет никакой ошибки или чего-либо, что подсказывало бы мне, что было бы неправильно. По поводу восстановления пакета просто нет никаких сообщений. Я также попытался добавить шаг восстановления пакета nuget, несмотря на то, что он кажется избыточным, но он также ничего не делает. Нет выхода. Журнал агента сборки выглядит так:

23:02:49.826405 PowerShellHandler.Execute - AddCommand(C:\TFSAgent\tasks\NuGetInstaller\0.1.11\NuGetInstaller.ps1)
23:02:49.826405 PowerShellHandler.Execute - Add inputParameters
23:02:49.826405 PowerShellHandler.Execute - AddParameter(solution=C:\TFSAgent\_work\9c9a7daa\HiFxApi\main\src\HiFX.Api.sln)
23:02:49.826405 PowerShellHandler.Execute - AddParameter(excludeVersion=false)
23:02:49.826405 PowerShellHandler.Execute - AddParameter(noCache=false)
23:02:49.826405 PowerShellHandler.Execute - AddParameter(nuGetRestoreArgs=)
23:02:49.826405 PowerShellHandler.Execute - AddParameter(nuGetPath=)
23:02:50.074443 PowerShellHandler.Execute - Invoke

23:02:50.275946 FindFiles.FindMatchingFiles(rootFolder = , matchPattern = C:\TFSAgent\_work\9c9a7daa\HiFxApi\main\src\**\packages.config, includeFiles = True, includeFolders = False
23:02:50.275946 FindFiles.GetMatchingItems(includePatterns.Count = 1, excludePatterns.Count = 0, includeFiles = True, includeFolders = False
23:02:50.291644 FindFiles.FindMatchingFiles - Found 0 matches
23:02:50.322449 BaseLogger.LogStatus(scope.JobId = e0495eb1-3867-4bdf-8c90-196620cc0e1d, scope.TimelineRecordId = 6ac5c739-f581-4081-9cab-1404f28bfcc3, record.Name = )
23:02:50.322449 BaseLogger.LogFile(scope.JobId = e0495eb1-3867-4bdf-8c90-196620cc0e1d, path = C:\TFSAgent\_diag\w2ec95c01-f3c6-4db4-b910-0d40c922051b.log)
23:02:50.322449 JobExtensionManager.OnAfterExecuteTask
23:02:50.322449 BaseLogger.LogStatus(scope.JobId = e0495eb1-3867-4bdf-8c90-196620cc0e1d, scope.TimelineRecordId = 6ac5c739-f581-4081-9cab-1404f28bfcc3, record.Name = )
23:02:50.322449 BaseLogger.LogConsoleMessage(scope.JobId = e0495eb1-3867-4bdf-8c90-196620cc0e1d, message = ##[section]Finishing task: NuGetInstaller)
23:02:50.322449 LoggingEventHandlerManager.LoadLoggingEventHandlers(pluginPath=)

Должен ли я иметь файл packages.config, зарегистрированный с моим решением?


person brushwood    schedule 21.07.2015    source источник


Ответы (2)


Вы правы, вам нужно отправить файл packages.config в вашу VCS. Он содержит список пакетов (+ их версия и целевая платформа), используемых в решении.

FindFiles.FindMatchingFiles - Found 0 matches в вашем журнале намекает, что агент сборки искал файлы packages.config, не нашел их и, следовательно, предположил, что восстанавливать нечего, и завершил работу без ошибок.

person nphx    schedule 22.07.2015
comment
Мне это кажется совершенно обратным. VS 2015 не требуется файл packages.config для восстановления nuget, и он не создает его для вас, как это было в VS 2013. Если это необходимо, это означает, что нам придется вручную поддерживать этот файл packages.config по мере добавления nuget в наше решение. - person brushwood; 22.07.2015
comment
@brushwood Единственный раз, когда VS 2015 не требует packages.config, насколько мне известно, это проект ASP.NET 5. В этом случае восстановление пакета необходимо выполнить через dnu. - person nphx; 23.07.2015

Может быть другая причина описанного поведения. Действие nuget restore, реализованное в задаче VSBuild, ищет файлы packages.config в каталоге файлов решения.

Например, если схема решения похожа на приведенную ниже, nuget restore не найдет packages.config и просто ничего не сделает:

  • Folder A
    • Folder A1
    • Folder A2
      • Folder A21
    • a.csproj
    • a.sln
  • Folder B
    • b.csproj
    • packages.config

Вы можете изучить код задачи сборки VSBuild, чтобы узнать подробности:

$slnFolder = $(Get-ItemProperty -Path $sf -Name 'DirectoryName').DirectoryName

Write-Verbose "Searching for nuget package configuration files using pattern $slnFolder\**\packages.config"
$pkgConfig = Find-Files -SearchPattern "$slnFolder\**\packages.config"
if ($pkgConfig)
{
   Write-Verbose "Running nuget package restore for $slnFolder"
   Invoke-Tool -Path $nugetPath -Arguments "restore `"$sf`" -NonInteractive" -WorkingFolder $slnFolder
}
else
{
   Write-Verbose "No nuget package configuration files found for $sf"
}
person Yan Sklyarenko    schedule 22.07.2015
comment
У нас нет файлов packages.config или csproj. Все зависимости nuget перечислены в файле project.json. Visual Studio 2015 использует этот файл для восстановления пакета nuget. Разве агент сборки TFS 2015 не должен работать таким же образом? - person brushwood; 22.07.2015
comment
Конечно, часть сборки должна соответствовать тому, что может делать VS, но, очевидно, сегодня она не поддерживается. По крайней мере, задачи VSBuild и MSBuild полагаются на packages.config для восстановления nuget, насколько я могу судить. - person Yan Sklyarenko; 22.07.2015
comment
Я действительно надеялся, что мне просто чего-то не хватает и что это должно работать автоматически ... или что есть хоть какой-то способ сгенерировать файл packages.config. Ну что ж, думаю, я начну вручную создавать файлы packages.config. - person brushwood; 22.07.2015
comment
Добавление packages.config на самом деле ничего не делает. Восстановление пакетов в старом стиле запускается и загружает пакеты nuget в папку / packages, но в VS 2015 это ни для чего не используется. - person brushwood; 22.07.2015