使用DotNetCoreBuild别名设置完整版本的Cake Build

5
我在使用Cake中的ParseReleaseNotes别名来管理我的版本控制,在一个使用CreateAssemblyInfo别名修补程序集信息的项目中运行良好。现在,由于项目不再使用csproj而是使用project.json,我想实现相同的功能,但是使用assembly info不是project.json的真正选项。
查看DotNetCoreBuild(string, ​DotNetCoreBuildSettings)​及其DotNetCoreBuildSettings,似乎只有通过其VersionSuffix属性设置版本的部分内容的方法。
是否有一个Cake别名/设置来实现这一点,或者从Cake中修补project.json的可能性?
2个回答

5

没有内置的Cake别名来提供这个功能,但是您可以利用第三方插件来实现MagicChunks项目。只需在Cake脚本中添加以下内容即可:

#addin "MagicChunks"

从那里开始,您可以进行如下操作:

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

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

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

注意:本样例取自项目


2

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

尽管如此,由于 project.json 只是“JSON”格式,因此完全可以使用 JSON 序列化程序即 JSON.Net 来补丁 project.json

下面我创建了一个示例,引用了 JSON.Net 作为插件,然后创建了一个 UpdateProjectJsonVersion 实用函数,我可以使用解析的 ReleaseNotes (在这种情况下,为简单起见,我已将其硬编码)来修补我的 project.json

#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,它将导致版本与您的发布说明相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接