首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过我们的CI平台(哈德逊)自动递增C#程序集版本?

如何通过我们的CI平台(哈德逊)自动递增C#程序集版本?
EN

Stack Overflow用户
提问于 2009-07-14 17:35:47
回答 12查看 119K关注 0票数 116

我和我的团队在增加程序集版本号方面做得很糟糕,我们经常发布1.0.0.0版本的程序集。显然,这会引起很多令人头疼的问题。

通过我们的CI平台,我们的实践变得更好了,我真的很想将它设置为自动递增assemblyinfo.cs文件中的值,这样我们的程序集的版本就会随着该程序集中的代码更改而自动更新。

我之前(在我们发现Hudson之前)设置了一种通过msbuild或命令行(不记得了)递增该值的方法,但在Hudson中,这将更新SVN存储库并触发另一个构建。这将导致一个缓慢的无限循环,因为Hudson每小时轮询一次SVN。

让Hudson增加版本号是个坏主意吗?另一种方法是什么呢?

理想情况下,我的解决方案标准应该是:

在build

  • 仅增加已更改的程序集中的内部版本号之前,
  • 会增加assemblyinfo.cs中的内部版本号。这可能是不可能的,因为Hudson每次进行构建时都会清除项目文件夹,
  • 会将更改的assemblyinfo.cs提交到代码存储库(目前,Hudson不会在下次扫描

的更改时触发新的构建

在我的脑海中,我可以很容易地通过批处理文件/命令来解决大多数问题,但我的所有想法都会导致Hudson在下次扫描时触发新的构建。我不是在寻找能为我做所有事情的人,只是给我指出正确的方向,也许是一种让Hudson忽略某些SVN提交的技术,等等。

到目前为止,我所发现的一切只是一篇解释如何自动递增版本号的文章,没有考虑到可能会旋转成无限循环的CI平台。

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-07-14 17:38:52

一种简单的替代方法是,通过将version属性设置为major.minor.* (如AssemblyInfo文件模板中所述),让C#环境为您增加程序集版本。

不过,您可能正在寻找更全面的解决方案。

编辑(对评论中的问题的回应):

来自AssemblyInfo.cs

代码语言:javascript
复制
// 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.*")]
票数 64
EN

Stack Overflow用户

发布于 2010-08-19 06:10:32

下面是我为标记AssemblyFileVersion属性所做的工作。

已从AssemblyInfo.cs中删除AssemblyFileVersion

向项目中添加一个名为AssemblyFileInfo.cs的新的空文件。

在hudson构建机器上或作为项目中的NuGet dependency安装MSBuild community tasks工具集。

编辑项目(csproj)文件,它只是一个msbuild文件,并添加以下内容。

在某个地方会有一个<PropertyGroup>来说明版本。将其更改为例如

代码语言:javascript
复制
 <Major>1</Major>
 <Minor>0</Minor>
 <!--Hudson sets BUILD_NUMBER and SVN_REVISION -->
 <Build>$(BUILD_NUMBER)</Build>
 <Revision>$(SVN_REVISION)</Revision>

Hudson提供了您在hudson上构建项目时看到的那些环境变量(假设它是从subversion获取的)。

在项目文件的底部,添加

代码语言:javascript
复制
 <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属性的AssemblyFileVersion.cs。如果您愿意,您可以对任何/所有版本属性执行此操作。

结果是,每当你发布一个hudson build,结果程序集得到一个1.0.HUDSON_BUILD_NR.SVN_REVISION的AssemblyFileVersion,例如1.0.6.2632,这意味着在hudson的第6个build #,但它来自subversion修订版2632。

票数 66
EN

Stack Overflow用户

发布于 2010-02-05 00:23:41

这是一个优雅的解决方案,在添加新项目时需要做一些前期工作,但处理过程非常简单。

其思想是每个项目都链接到一个仅包含程序集版本信息的解决方案文件。因此,您的构建过程只需更新单个文件,所有的程序集版本在编译时从一个文件中提取。

步骤:

将一个类添加到你的解决方案文件中,我命名为min SharedAssemblyProperties.cs

  • Remove所有的cs信息从那个新文件中剪切出来: AssemblyVersion("1.0.0.0")

  • Add : SharedAssemblyProperties.cs)

  • Add将语句“ AssemblyInfo;”复制到文件中,然后将数据粘贴到你的新cs文件中(例如SharedAssemblyProperties.cs)
  1. Add an existing item to *.cs
  2. AssemblyInfo)。在添加文件之前继续阅读)然后选择文件,然后单击添加按钮旁边的下拉列表,然后选择“Add As Link".
  3. Repeat steps 5

6

  1. all existing
  2. new projects in

solution

当您将文件作为链接添加时,它会将数据存储在项目文件中,并在编译时从该文件中提取程序集版本信息。

在源代码管理中,您添加一个bat文件或脚本文件,该文件只是递增SharedAssemblyProperties.cs文件,所有项目都将根据该文件更新其程序集信息。

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1126880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档