如何通过我们的CI平台(Hudson)自动增加C#程序集版本?
我自己和我的团队在增加程序集版本号方面非常可怕,我们经常以1.0.0.0版本发布程序集。 很明显,这会引起很多头痛。
通过我们的CI平台,我们的实践得到了很大改善,我真的希望将它设置为自动递增assemblyinfo.cs
文件中的值,以便我们的程序集版本可以自动更新该组件。
我以前设置过(在我们找到Hudson之前)通过msbuild
或命令行(不记得)增加值的方法,但是使用Hudson,它将更新SVN存储库并触发另一个构建。 随着Hudson每小时轮询SVN,这将导致缓慢的无限循环。
哈德森是否将版本号增加为一个坏主意? 什么是替代方法呢?
理想情况下,我的解决方案标准是:
assemblyinfo.cs
构建之前 在我的脑海里解决这个问题,我可以很容易地通过批处理文件/命令想出一个解决方案,但是我所有的想法都会让Hudson在下次扫描时触发一个新的构建。 我不是在找人为我做所有事情,只是指向正确的方向,也许是让哈德森忽略某些SVN提交等技巧。
到目前为止,我发现的所有内容都只是一篇文章,解释如何自动增加版本号,没有考虑可以旋转成无限循环的CI平台。
一个简单的替代方法是让C#环境为您递增程序集版本,方法是将版本属性设置为major.minor.*
(如AssemblyInfo文件模板中所述)。
不过,您可能正在寻找更全面的解决方案。
编辑 (对评论中的问题的回应):
来自AssemblyInfo.cs
:
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
这是我所做的,用于标记AssemblyFileVersion属性。
从AssemblyInfo.cs中删除了AssemblyFileVersion
将名为AssemblyFileInfo.cs的新文件添加到项目中。
在哈德森构建机器上安装MSBuild社区任务工具集,或作为项目中的NuGet依赖项。
编辑项目(csproj)文件,它只是一个msbuild文件,并添加以下内容。
某处会有一个<PropertyGroup>
指出版本。 改变它,让它读取例如
<Major>1</Major>
<Minor>0</Minor>
<!--Hudson sets BUILD_NUMBER and SVN_REVISION -->
<Build>$(BUILD_NUMBER)</Build>
<Revision>$(SVN_REVISION)</Revision>
Hudson提供了在项目建立在哈德森上时看到的那些env变量(假设它是从颠覆中获取的)。
在项目文件的底部,添加
<Import Project="$(MSBuildExtensionsPath)MSBuildCommunityTasksMSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)MSBuildCommunityTasksMSBuild.Community.Tasks.Targets')" />
<Target Name="BeforeBuild" Condition="Exists('$(MSBuildExtensionsPath)MSBuildCommunityTasksMSBuild.Community.Tasks.Targets')">
<Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)" />
<AssemblyInfo CodeLanguage="CS" OutputFile="AssemblyFileInfo.cs" AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" AssemblyConfiguration="$(Configuration)" Condition="$(Revision) != '' " />
</Target>
这将使用MSBuildCommunityTasks生成AssemblyFileVersion.cs,以在构建项目之前包含AssemblyFileVersion属性。 如果需要,您可以为任何/所有版本属性执行此操作。
结果是,无论何时发出哈德森版本,生成的程序集都会得到1.0.HUDSON_BUILD_NR.SVN_REVISION的AssemblyFileVersion,例如1.0.6.2632,这意味着哈德森版本的第6版build#将从Subversion版本2632中引出。
这是一个优雅的解决方案,需要在添加新项目时提前做一些工作,但很容易处理该过程。
这个想法是,每个项目链接到一个只包含程序集版本信息的解决方案文件。 所以你的编译过程只需要更新一个文件,编译时从一个文件中取出所有的程序集版本。
脚步:
将文件作为链接添加时,会将数据存储在项目文件中,并在编译时从该文件中提取程序集版本信息。
在源代码管理中,您添加一个bat文件或脚本文件,该文件只是递增SharedAssemblyProperties.cs文件,所有项目都将从该文件更新其装配信息。
链接地址: http://www.djcxy.com/p/8943.html上一篇: How can I auto increment the C# assembly version via our CI platform (Hudson)?
下一篇: Android home screen widget mysteriously fails to receive touch events