使用Cake如何仅更新assemblyinfo.cs中的版本信息?

11

我对cakebuild非常陌生。我想使用cakebuild更新assemblyinfo.cs的版本信息。

public static void CreateAssemblyInfo()方法会覆盖整个assemblyinfo文件的内容。但我只需要更新版本信息。

我该如何做到这一点呢?

谢谢, Aradhya

2个回答

14

如果您不想拥有单独的文件,您也可以使用正则表达式替换:

#addin "Cake.FileHelpers"
var yourVersion = "1.0.0.0";

Task("SetVersion")
   .Does(() => {
       ReplaceRegexInFiles("./your/AssemblyInfo.cs", 
                           "(?<=AssemblyVersion\\(\")(.+?)(?=\"\\))", 
                           yourVersion);
   });

根据您的AssemblyInfo文件,您可能还想替换AssemblyFileVersionAssemblyInformationalVersion的值。


10

有2个文件,一个用于静态内容,另一个用于自动生成的部分。

我通常采用的模式是在项目之间共享一个 SolutionInfo.cs 文件,并为每个项目使用一个独特的 AssemblyInfo.cs

一个示例文件夹结构可能是:

src
|    Solution.sln
|    SolutionInfo.cs
|    
\--- Project
    |   Project.csproj
    |
    \---Properties
            AssemblyInfo.cs

基本上你的csproj文件不再是:

<Compile Include="Properties\AssemblyInfo.cs" />

大概是这样:

<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="..\SolutionInfo.cs">
  <Link>Properties\SolutionInfo.cs</Link>
</Compile>

这种方法可以使你保留AssemblyInfo.cs中的任何手动编辑,并可以安全地进行自动生成,而不会覆盖该信息。

这也让你在解决方案中的不同项目之间共享版本/版权/公司等信息成为可能。

这个 Cake 构建脚本的部分看起来像这样:

Task("SolutionInfo")
    .IsDependentOn("Clean")
    .IsDependentOn("Restore")
    .Does(() =>
{
    var file = "./src/SolutionInfo.cs";
    CreateAssemblyInfo(file, assemblyInfo);
});

你会将"SolutionInfo.cs"文件包含在源代码控制中吗?还是会忽略它?我正在尝试找出如何最好地设置构建,以便能够根据GitVersion-info设置版本。在我的情况下使用.NET7,也许有更好的方法? - Markus Knappen Johansson
更新:没关系,我刚刚在DotNetBuildSettings类中找到了“DotNetMSBuildSettings”=D - Markus Knappen Johansson

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