我和我的团队在增加程序集版本号方面做得很糟糕,我们经常发布1.0.0.0版本的程序集。显然,这会引起很多令人头疼的问题。
通过我们的CI平台,我们的实践变得更好了,我真的很想将它设置为自动递增assemblyinfo.cs文件中的值,这样我们的程序集的版本就会随着该程序集中的代码更改而自动更新。
我之前(在我们发现Hudson之前)设置了一种通过msbuild或命令行(不记得了)递增该值的方法,但在Hudson中,这将更新SVN存储库并触发另一个构建。这将导致一个缓慢的无限循环,因为Hudson每小时轮询一次SVN。
让Hudson增加版本号是个坏主意吗?另一种方法是什么呢?
理想情况下,我的解决方案标准应该是:
在build
assemblyinfo.cs中的内部版本号。这可能是不可能的,因为Hudson每次进行构建时都会清除项目文件夹,的更改时触发新的构建
在我的脑海中,我可以很容易地通过批处理文件/命令来解决大多数问题,但我的所有想法都会导致Hudson在下次扫描时触发新的构建。我不是在寻找能为我做所有事情的人,只是给我指出正确的方向,也许是一种让Hudson忽略某些SVN提交的技术,等等。
到目前为止,我所发现的一切只是一篇解释如何自动递增版本号的文章,没有考虑到可能会旋转成无限循环的CI平台。
发布于 2009-07-14 17:38:52
一种简单的替代方法是,通过将version属性设置为major.minor.* (如AssemblyInfo文件模板中所述),让C#环境为您增加程序集版本。
不过,您可能正在寻找更全面的解决方案。
编辑(对评论中的问题的回应):
来自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.*")]发布于 2010-08-19 06:10:32
下面是我为标记AssemblyFileVersion属性所做的工作。
已从AssemblyInfo.cs中删除AssemblyFileVersion
向项目中添加一个名为AssemblyFileInfo.cs的新的空文件。
在hudson构建机器上或作为项目中的NuGet dependency安装MSBuild community tasks工具集。
编辑项目(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属性的AssemblyFileVersion.cs。如果您愿意,您可以对任何/所有版本属性执行此操作。
结果是,每当你发布一个hudson build,结果程序集得到一个1.0.HUDSON_BUILD_NR.SVN_REVISION的AssemblyFileVersion,例如1.0.6.2632,这意味着在hudson的第6个build #,但它来自subversion修订版2632。
发布于 2010-02-05 00:23:41
这是一个优雅的解决方案,在添加新项目时需要做一些前期工作,但处理过程非常简单。
其思想是每个项目都链接到一个仅包含程序集版本信息的解决方案文件。因此,您的构建过程只需更新单个文件,所有的程序集版本在编译时从一个文件中提取。
步骤:
将一个类添加到你的解决方案文件中,我命名为min SharedAssemblyProperties.cs
6
solution
当您将文件作为链接添加时,它会将数据存储在项目文件中,并在编译时从该文件中提取程序集版本信息。
在源代码管理中,您添加一个bat文件或脚本文件,该文件只是递增SharedAssemblyProperties.cs文件,所有项目都将根据该文件更新其程序集信息。
https://stackoverflow.com/questions/1126880
复制相似问题