Cake Build 集完整版与 DotNetCoreBuild 别名

Cake Build set full version with DotNetCoreBuild alias

我在 Cake 中使用 ParseReleaseNotes 别名来管理我的版本控制,在我使用 CreateAssemblyInfo 别名修补程序集信息的项目中工作正常。

现在项目不使用 csproj,但 project.json 我想实现相同的目的,但汇编信息不是 project.json 的真正选项。

查看 DotNetCoreBuild(string, ​DotNetCoreBuildSettings)​ 和它的 DotNetCoreBuildSettings 似乎只能通过 VersionSuffix 属性.[=15= 设置部分版本]

是否有 Cake 别名/设置来实现此目的,或者是否可以从 Cake 中修补 project.json?

没有内置别名来修补 project.json 版本或 dotnet build 的参数来设置我所知道的完整版本。

也就是说 project.json 只是 "JSON" 完全可以使用 JSON 序列化程序修补 project.json,即 JSON.Net.

下面我创建了一个引用 JSON.Net 作为插件的示例,然后创建了一个 UpdateProjectJsonVersion 实用函数,我可以使用它来修补我的 project.json 使用解析的 ReleaseNotes(在本例中,为简单起见,我对其进行了硬编码)。

#addin "Newtonsoft.Json"

// fake a release note
ReleaseNotes releaseNotes = new ReleaseNotes(
    new Version("3.0.0"),
    new [] {"3rd release"},
    "3.0.-beta"
    );

// project.json to patch
FilePath filePaths = File("./project.json");

// patch project.json
UpdateProjectJsonVersion(releaseNotes.RawVersionLine, filePaths);

// utility function that patches project.json using json.net
public static void UpdateProjectJsonVersion(string version, FilePath projectPath)
{
    var project = Newtonsoft.Json.Linq.JObject.Parse(
        System.IO.File.ReadAllText(projectPath.FullPath, Encoding.UTF8));

    project["version"].Replace(version);

    System.IO.File.WriteAllText(projectPath.FullPath, project.ToString(), Encoding.UTF8);
}

所以基本上只需在调用 DotNetCoreBuild 别名之前调用 UpdateProjectJsonVersion,它会生成与发行说明相同的版本。

没有内置的 Cake Alias 来提供此功能,但您可以为 MagicChunks 项目使用第 3 方插件。您可以通过简单地执行以下操作将其添加到您的 Cake 脚本中:

#addin "MagicChunks"

然后,您可以执行以下操作:

var projectToPackagePackageJson = $"{projectToPackage}/project.json";
Information("Updating {0} version -> {1}", projectToPackagePackageJson, nugetVersion);

TransformConfig(projectToPackagePackageJson, projectToPackagePackageJson, new TransformationCollection {
    { "version", nugetVersion }
});

其中 TransformConfig 是由 MagicChunks 插件添加的方法别名。

注意: 此示例取自以下 project