如何使用Visual Studio Team Services更正CI / CD NuGet包构建的输出目录?

时间:2017-08-11 10:09:29

标签: nuget azure-devops

我刚刚开始尝试使用Visual Studio Team Services配置CI / CD进程,以便有一个门控签入过程,然后自动打包并将输出推送到私有NuGet Feed。我成功完成了“获取源”任务,该任务本身存在于构建定义中,但是我的包任务在此阶段失败:

d:\a\_tool\NuGet\4.0.0\x64\nuget.exe pack 
d:\a\1\s\Core\Core\Core.csproj -NonInteractive -
OutputDirectory d:\a\1\a -Properties Configuration=$Release;OutDir=$(OutDir) 
-Symbols -version 1.0.0-CI-20170811-095629 -Verbosity Detailed
NuGet Version: 4.0.0.2283
Attempting to build package from 'Core.csproj'.
MSBuild auto-detection: using msbuild version '14.0' from 'C:\Program Files (x86)\MSBuild\14.0\bin\amd64'. Use option -MSBuildVersion to force nuget to use a specific version of MSBuild.
NuGet.CommandLine.CommandLineException: Unable to find 'd:\a\1\s\Core\Core\$(OutDir)\Core.dll'. Make sure the project has been built.

基本上,日志的第二行表明我的项目文件位于d:\a\1\s,但输出是指向d\a\1\a - 不是同一个地方。然后,NuGet打包我的文件的指令在正确的位置(d:\a\1\s)中查找,但该文件不在此处。

我知道我可以在构建定义中指定一个包文件夹,但是我没有从默认($(Build.ArtifactStagingDirectory))更改它 - 我希望这可以原生工作,但由于原因我无法解释,它不是。

我是否可以在其他构建属性中提供令牌或通配符来纠正此问题?我已经在此处获得了第一个发布的答案的指导,并将$(Build.ArtifactStagingDirectory)更改为$(Build.Repository.LocalPath),这使我更接近目标,因为错误现在显示为-OutputDirectory d:\a\1\s\... - 我试过了手动放置各种明智的路径没有结束,但错误仍然存​​在。

1 个答案:

答案 0 :(得分:0)

此问题与OutDir=$(OutDir)而非 OutputDirectory 有关。

OutputDirectory 指定存储创建的包的文件夹, OutDir 指定构建输出,但项目需要在 NuGet pack之前构建任务,因此您需要添加 Visual Studio Build任务或相关来构建项目。

您可以将其他构建属性框留空以使用默认输出配置,因为您只需要知道包存储路径以将包推送到远程源。

如果要更改构建输出,可以指定/p:OutDir msbuild参数来更改构建输出位置。例如:

  1. Visual Studio构建任务(MSBuild参数:/ p:OutDir = $(Build.ArtifactStagingDirectory))
  2. NuGet pack任务(其他构建属性:OutDir = $(Build.ArtifactStagingDirectory))
  3. 顺便说一句,要更改包存储位置,您需要指定OutputDirectory。