4

如果我指定“OutputType”与省略此设置,GitVersion 别名返回的对象不同是否正常?

如果我指定输出类型,则返回对象的属性都是“空”,但是当我省略设置时,属性被设置为预期值

例如:

Task("Version")
 .Does(() =>
{
 var versionInfo = GitVersion(new GitVersionSettings()
 {
   UpdateAssemblyInfo = true,
   OutputType = GitVersionOutput.BuildServer
 });
 Information("MajorMinorPatch: {0}", versionInfo.MajorMinorPatch);
 Information("FullSemVer: {0}", versionInfo.FullSemVer);
 Information("InformationalVersion: {0}", versionInfo.InformationalVersion);
 Information("LegacySemVer: {0}", versionInfo.LegacySemVer);
 Information("Nuget v1 version: {0}", versionInfo.NuGetVersion);
 Information("Nuget v2 version: {0}", versionInfo.NuGetVersionV2);
});

输出是:

MajorMinorPatch: [NULL]
FullSemVer: [NULL]
InformationalVersion: [NULL]
LegacySemVer: [NULL]
Nuget v1 version: [NULL]
Nuget v2 version: [NULL]

如果我像这样改变我的任务:

Task("Version")
 .Does(() =>
{
 var versionInfo = GitVersion(new GitVersionSettings()
 {
   UpdateAssemblyInfo = false
 });
 Information("MajorMinorPatch: {0}", versionInfo.MajorMinorPatch);
 Information("FullSemVer: {0}", versionInfo.FullSemVer);
 Information("InformationalVersion: {0}", versionInfo.InformationalVersion);
 Information("LegacySemVer: {0}", versionInfo.LegacySemVer);
 Information("Nuget v1 version: {0}", versionInfo.NuGetVersion);
 Information("Nuget v2 version: {0}", versionInfo.NuGetVersionV2);
});

输出是:

MajorMinorPatch: 0.1.0
FullSemVer: 0.1.0+1
InformationalVersion: 0.1.0+1.Branch.master.Sha.5b2
LegacySemVer: 0.1.0
Nuget v1 version: 0.1.0
Nuget v2 version: 0.1.0
4

1 回答 1

4

这是“设计”。

https://github.com/cake-build/cake/blob/develop/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs#L71

GitVersion 具有 JSON 的默认输出类型,这意味着包含所有断言版本号的 JSON 输出可供检查。此时,Cake 收集此 JSON 输出,将它们组合成一个GitVersion对象,并将其返回给 Cake 脚本。

使用OutputType = GitVersionOutput.BuildServer时没有 JSON 输出。相反,GitVersion 与运行它的构建服务器一起工作,无论是 TeamCity、AppVeyor 还是其他任何东西,并通过另一种机制使断言的版本号可用。即通过设置环境变量,或使用服务消息告诉构建服务器这一点。因此,Cake 并没有真正消耗任何东西来创建GitVersion返回的对象。

解决这个问题的典型方法是首先运行 GitVersion,OutputType = GitVersionOutput.BuildServer然后立即再次运行它,并使用返回的变量。这实际上是我们在自己的 Cake 脚本中所做的:

https://github.com/cake-build/cake/blob/develop/build/version.cake#L38

第二次运行它实际上应该非常快,因为 GitVersion 实际上缓存了第一次运行的结果。实际上,我们可以在 Cake 中做一些事情来读取这个缓存的输出,并将其用作调用的输出。你能在这里提出这个问题,以便我们跟踪它吗?

于 2016-07-27T06:43:56.353 回答