我对cakebuild非常陌生。我想使用cakebuild更新assemblyinfo.cs的版本信息。
public static void CreateAssemblyInfo()
方法会覆盖整个assemblyinfo文件的内容。但我只需要更新版本信息。
我该如何做到这一点呢?
谢谢, Aradhya
如果您不想拥有单独的文件,您也可以使用正则表达式替换:
#addin "Cake.FileHelpers"
var yourVersion = "1.0.0.0";
Task("SetVersion")
.Does(() => {
ReplaceRegexInFiles("./your/AssemblyInfo.cs",
"(?<=AssemblyVersion\\(\")(.+?)(?=\"\\))",
yourVersion);
});
根据您的AssemblyInfo文件,您可能还想替换AssemblyFileVersion
或AssemblyInformationalVersion
的值。
有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);
});