我刚刚开始尝试使用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\...
- 我试过了手动放置各种明智的路径没有结束,但错误仍然存在。
答案 0 :(得分:0)
此问题与OutDir=$(OutDir)
而非 OutputDirectory 有关。
OutputDirectory 指定存储创建的包的文件夹, OutDir 指定构建输出,但项目需要在 NuGet pack之前构建任务,因此您需要添加 Visual Studio Build任务或相关来构建项目。
您可以将其他构建属性框留空以使用默认输出配置,因为您只需要知道包存储路径以将包推送到远程源。
如果要更改构建输出,可以指定/p:OutDir
msbuild参数来更改构建输出位置。例如:
顺便说一句,要更改包存储位置,您需要指定OutputDirectory。