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

时间:2016-11-02 13:35:06

标签: c# cakebuild

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

'We will run through each indice For i = 0 To CheckedListBox1.Items.Count - 1 'You can replace As Object by your object type 'ex : Dim Item As String = CType(CheckedListBox1.Items(i), String) Dim Item As Object = CheckedListBox1.Items(i) 'We ask if this item is checked or not If CheckedListBox1.GetItemChecked(i) Then 'Do something if Item is checked Else 'Do something else if Item is not checked End If Next 方法会覆盖assemblyinfo文件的全部内容。但我需要更新版本信息。

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

此致 Aradhya

2 个答案:

答案 0 :(得分:8)

有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);
});

答案 1 :(得分:8)

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

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

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

您可能还希望替换AssemblyFileVersionAssemblyInformationalVersion

的值,具体取决于您的AssemblyInfo文件