11

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

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

我怎样才能做到这一点。?

问候,阿拉迪亚

4

2 回答 2

13

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

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

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

根据您的 AssemblyInfo 文件,您可能还需要替换AssemblyFileVersionAssemblyInformationalVersion

于 2017-07-31T19:39:55.587 回答
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);
});
于 2016-11-02T13:38:16.607 回答