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

How do I pass a version information to MSBuild within Visual Studio Team Services

我正在通过 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.0\bin\Microsoft.Common.CurrentVersion.targets(3506,5): Error MSB3174: Invalid value for 'AssemblyVersion'.

如果我使用硬编码的版本号(例如“1.0.9.99”),它工作正常。

感谢所有对我的问题发表评论的人。它帮助我提出了一个解决方案,我将在此处提供,以防对其他人有所帮助。

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

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

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

现在我将其作为参数传递给 gulp 脚本并使用该 gulp 脚本调用 msbuild。有点复杂,因为我可以直接调用 msbuild,但我使用 gulp 做其他事情,它有其他配置,否则我不得不硬编码到 msbuild 任务的参数中,所以我选择保留它在 gulp.

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

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

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

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

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