我和我的团队在增加程序集版本号方面表现得非常糟糕,我们经常以1.0.0.0版本发布程序集.显然,这会引起很多头痛.

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

我之前(在我们找到Hudson之前)已经设置了一种通过msbuild或命令行(不记得了)增加值的方法,但在Hudson中,这将更新SVN存储库并触发另一个构建.这将导致一个缓慢的无限循环,因为哈德逊每小时都会投票给SVN.

让Hudson增加版本号是个坏主意吗?做这件事的另一种方法是什么?

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

  • 在生成之前,将生成数增加到assemblyinfo.cs
  • 仅增加已更改的程序集中的内部版本号.这可能是不可能的,因为Hudson每次生成时都会清除项目文件夹
  • 提交更改的assemblyinfo.将cs导入代码库(目前为VisualSVN)
  • 不会导致Hudson在下次扫描更改时触发新生成

在我的头脑中解决这个问题,我可以通过批处理文件/命令轻松地想出解决大部分问题的方法,但我所有的 idea 都会导致哈德逊在下次扫描时触发新的构建.我不是在寻找一个能为我做所有事情的人,只是给我指出正确的方向,也许是一种让哈德逊忽略某些SVN提交的技术,等等.

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

推荐答案

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

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

EDIT(在 comments 中回答问题):

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.*")]

.net相关问答推荐

安装特定主要版本的DotNet SDK最新版本

如何在AutoMapper中添加自定义方法到项目中?

Msbuild try 构建 msbuild.exe 而不是我的 .csproj 文件

为什么 .net 对字符串使用 UTF16 编码,但默认使用 UTF-8 来保存文件?

如何中止任务,如中止线程(Thread.Abort 方法)?

我可以使用 UriTemplate 将非字符串传递给 WCF RESTful 服务吗?

使用 C# 清除文本文件的内容

注册 COM 互操作与使程序集 COM 可见

从 Web.Config 中的邮箱友好显示名称存储 Smtp

如何让 .NET 的 Path.Combine 将正斜杠转换为反斜杠?

找不到 Assert.Fail 和 Assert.Pass 或等效项

哪个更快:清除集合或实例化新的

静态方法继承的正确替代方法是什么?

无法加载文件或程序集System.ValueTuple

C# List<> 按 x 然后 y 排序

为什么甚至可以更改私有成员,或使用反射在 C# 中运行私有方法?

为什么 Roslyn 中有异步状态机类(而不是 struct )?

如何访问 Session 变量并在 javascript 中设置它们?

WPF中的依赖属性和附加属性有什么区别?

为什么 IList 不支持 AddRange