【问题标题】:Cake Build set full version with DotNetCoreBuild alias带有 DotNetCoreBuild 别名的 Cake Build 集完整版
【发布时间】:2016-08-03 21:01:13
【问题描述】:

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

现在项目不使用 csproj 但 project.json 我想实现相同的目标,并且程序集信息不是 project.json 的真正选择。

查看DotNetCoreBuild(string, ​DotNetCoreBuildSettings)​DotNetCoreBuildSettings,似乎只有一种方法可以通过VersionSuffix 属性设置部分版本。

是否有 Cake 别名/设置来实现这一点,或者是否可以从 Cake 修补 project.json?

【问题讨论】:

    标签: c# coreclr cakebuild


    【解决方案1】:

    没有内置的 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

    【讨论】:

      【解决方案2】:

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

      也就是说,project.json 只是“JSON”,因此完全可以使用 JSON 序列化程序(即JSON.Net)修补 project.json

      下面我创建了一个引用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,它会产生与您的发行说明相同的版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 2019-09-11
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多