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

如何使用Visual Studio Team Services更正CI/CD NuGet包生成的输出目录?,nuget,azure-devops,Nuget,Azure Devops,我刚刚开始尝试使用VisualStudioTeamServices配置一个CI/CD进程,以期拥有一个门控签入进程,该进程将自动打包并将输出推送到一个私有NuGet提要。我正在成功完成构建定义中本机存在的“获取源代码”任务,但是我的包任务在此阶段失败: 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 -Prope

我刚刚开始尝试使用VisualStudioTeamServices配置一个CI/CD进程,以期拥有一个门控签入进程,该进程将自动打包并将输出推送到一个私有NuGet提要。我正在成功完成构建定义中本机存在的“获取源代码”任务,但是我的包任务在此阶段失败:

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.
基本上,日志的第2行显示我的项目文件位于
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\…
-我尝试手动放置各种合理的路径来结束这一过程,但错误依然存在

参考文章。它具有TFS/VSTS环境的构建变量

$(Build.ArtifactStagingDirectory)
本身指的是\1\a文件夹。您可能需要尝试
$(Build.Repository.LocalPath)
变量


如果它能工作,不是100%,但不妨试试。

这个问题与
OutDir=$(OutDir)
有关,而不是OutputDirectory

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

您可以将“附加生成属性”框保留为空,以便根据配置使用默认输出,因为您只需要知道将包推送到远程提要的包存储路径

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

  • Visual Studio生成任务(MSBuild参数:/p:OutDir=$(Build.ArtifactStagingDirectory))
  • NuGet pack任务(其他生成属性:OutDir=$(build.ArtifactStagingDirectory))

  • 顺便说一句,要更改包存储位置,您需要指定OutputDirectory。

    生成过程的输出是否也设置为
    $(build.Repository.LocalPath)
    ?您可能需要这样做。我无法在任务列表中定义MSBuild事件的输出位置-我是否遗漏了某些内容?您是否以我的方式解决了此问题?@starain MSFT否,在尝试在CI/CD工作流中创建包时,我恐怕无法解决此问题。如果我使用NuPack NuGet包在解决方案中构建包,并简单地发布包,它可以正常工作,但这不是我想要实现的。这个问题仍然没有答案。你能提供简单的示例/步骤来解释这个需求吗?@starain MSFT我只是想:签入,执行一些单元测试,如果测试通过,构建一个NuGet包,如果包构建,将NuGet包发布到一个私有Feeds。用我的方式尝试后有什么问题吗?对,这是用于指定输出目录的内容。我在八达通中使用了你的建议,因为这就是我正在使用的——它就像一个符咒。