.net - 如何通过我们的 CI 平台 (Hudson) 自动增加 C# 程序集版本?

标签 .net msbuild continuous-integration hudson versioning

我自己和我的团队在增加程序集版本号方面非常糟糕,我们经常发布 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/

相关文章:

c# - Windows 窗体中的图形

c# - 处理 'Sequence has no elements' 异常

.net - system.web.datavisualization 和 system.web.UI.datavisualization 有什么区别

msbuild - 如何将 MSBuild .proj 文件添加到我的解决方案中?

msbuild - 如何在 MSBuild 还原目标中包含预发布包

visual-studio-2012 - 如何使用命令行 vstest.console.exe 在解决方案中运行所有测试?

continuous-integration - Concourse - 构建 docker 镜像时上一步缺少版本

c# - Web API 2 中的 OData 具有可嵌入的资源链接

c# - 如何指向 .NET Core PCL 中的不同 project.json 位置?

java - 在没有 maven 或 ant 的情况下在 Jenkins 中自动运行 JUnit 测试