我自己和我的团队在增加程序集版本号方面非常糟糕,我们经常发布 1.0.0.0 版本的程序集。显然,这会引起很多麻烦。
通过我们的CI,我们的实践变得更好了。平台,我真的很想将其设置为自动递增 assembleinfo.cs
文件中的值,以便我们的程序集的版本随着该程序集中的代码更改自动更新。
我之前设置过(在我们发现 Hudson 之前)一种通过 msbuild 或命令行(不记得了)来增加值的方法,但是使用 Hudson,这将更新SVN 存储库并触发另一个构建。这将导致缓慢的无限循环,因为 Hudson 每小时轮询 SVN。
让 Hudson 增加版本号是一个坏主意吗?有什么替代方法可以做到这一点?
理想情况下,我的解决方案标准是:
- 在构建之前增加
assembleinfo.cs
中的构建号 - 仅增加已更改的程序集中的内部版本号。这可能是不可能的,因为 Hudson 每次构建时都会清除项目文件夹
- 将更改后的 assemblyinfo.cs 提交到代码存储库(当前 VisualSVN )
- 不会导致 Hudson 在下次扫描更改时触发新构建
在我的脑海中解决这个问题,我可以通过批处理文件/命令轻松地想出大部分问题的解决方案,但我的所有想法都会导致 Hudson 在下次扫描时触发新的构建。我并不是在寻找某人为我做所有事情,只是为我指明正确的方向,也许是一种让 Hudson 忽略某些 SVN 提交的技术,等等。
到目前为止,我发现的所有内容都只是一篇解释如何使版本号自动递增的文章,没有考虑到可能陷入无限循环的 CI 平台。
最佳答案
这就是我所做的,用于标记 AssemblyFileVersion 属性。
从 AssemblyInfo.cs 中删除了 AssemblyFileVersion
将一个名为 AssemblyFileInfo.cs 的新空文件添加到项目中。
安装MSBuild community tasks Hudson 构建机器上的工具集或作为 NuGet dependency在您的项目中。
编辑项目(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 提供了您在 Hudson 上构建项目时看到的环境变量(假设它是从 subversion 获取的)。
在项目文件底部添加
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" />
<Target Name="BeforeBuild" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.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 属性。如果需要,您可以对任何/所有版本属性执行此操作。
结果是,每当您发出 hudson 构建时,生成的程序集都会获得 1.0.HUDSON_BUILD_NR.SVN_REVISION 的 AssemblyFileVersion,例如1.0.6.2632 ,这意味着 hudson 中的第 6 个版本号,来自 subversion 修订版 2632。
关于.net - 如何通过我们的 CI 平台 (Hudson) 自动增加 C# 程序集版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1126880/