从 GitVersion 返回的对象不一致

Object returned from GitVersion not consistent

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

如果我指定输出类型,返回对象的属性都是'null'但是当我省略设置时,属性设置为期望值

例如:

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

这是"by-design"。

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

GitVersion 的默认输出类型为 JSON,这意味着包含所有断言版本号的 JSON 输出可供检查。此时,Cake 收集这个 JSON 输出,将它们组合成一个 GitVersion 对象,然后 returns 到 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 中做一些事情来读取这个缓存的输出,并将其用作调用的输出。您能否将此作为问题提出来 here 以便我们跟踪它?