如何在Visual Studio Team Services中将版本信息传递给MSBuild

时间:2016-10-24 16:24:51

标签: azure-pipelines

我正在通过VSTS在云中构建。在这种情况下,我发布了一次点击应用程序并提供了MSBuild参数:

/target:publish
/property:PublishUrl=http://somurl.com/somepath/myapp.application
/property:ApplicationVersion="1.$(Year:yyyy).0.0"

我真的希望最后一个是:

/property:ApplicationVersion="1.$(Year:yyyy).$(DayOfYear).$(Build.BuildNumber)"

然而,除了硬编码字符串之外的任何东西都给了我:

  

C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ Microsoft.Common.CurrentVersion.targets(3506,5):错误MSB3174:' AssemblyVersion'的值无效。

如果我使用硬编码版本号(例如" 1.0.9.99"),它可以正常工作。

2 个答案:

答案 0 :(得分:2)

感谢所有评论我问题的人。它帮助我找到了一个我在这里提供的解决方案,以防它帮助其他人。

显然,在设置构建号格式时可以使用定义的here标记,然后通过传入$(Build.BuildNumber)在构建任务参数中使用。其他一些令牌可以用作任务参数,例如$(Rev:r),但其他如$(Year:yyyy)和$(DayOfYear)不能用作任务参数(尽管它们可用于设置构建数字格式)。

我从未尝试过传入$(Rev:r),因为我选择将我的内部版本号格式更改为有效的程序集版本号(之前没有)。我改成了:

1.$(Date:yyyy).$(Date:MMdd).$(Rev:r)

现在我将它作为参数传递给gulp脚本并使用gulp脚本来调用msbuild。有点费解,因为我可以直接调用msbuild,但我使用gulp进行其他操作,并且还有其他配置,否则我必须硬编码到msbuild任务的参数中,所以我选择保留它咽。

然后,使用gulp来调用msbuild,要求我知道msbuild的路径。测试msbuild任务向我展示了完整路径是什么,所以我可以将其添加到我的环境配置中(如果您有兴趣了解更多信息,请参阅npm config。)

答案 1 :(得分:1)

首先,您应该确保在构建定义选项中设置的构建号格式是可接受的格式,如W.X.Y.Z。

接下来,您可以在msbuild参数中传递内部版本号:

/property:ApplicationVersion="$(Build.BuildNumber)"

确保在双引号之间添加变量名称,否则您将继续收到相同的错误消息。