如何在Visual Studio中配置生成编号以启用dll比较

5
我正在使用Visual Studio 2008构建一个包含多个项目和项目依赖关系的C#解决方案。
我正在寻找一种方法,仅在构建项目的代码更改时更改dll版本号。

我目前使用Beyond Compare将我的本地构建版本与生产文件系统进行比较。目标是仅部署更新的dll。我使用自动递增版本号,每次打开Visual Studio并进行构建时,所有dll版本号都会递增。完整解决方案重建以及不同的开发人员进行构建并尝试部署时也是如此。

是否有一种方法可以配置Visual Studio仅根据更改的文件内容增加构建号?是否有插件可以实现这一点?

似乎这些文件的二进制比较也会失败,因为dll中存在不同的版本号。是否有人知道比较dll内容的更好工具?

提前感谢您的帮助。
4个回答

1

一种选择是转向连续集成解决方案,例如Cruise Control .Net,这允许在源代码控制系统中进行检查时触发构建。

关于程序集版本控制,我通常会创建一个单独的SolutionVersion.cs文件(用于替换默认的程序集版本cs文件),并将其链接到每个项目中(使用添加现有项,但更改按钮以添加为链接)

然后,我使用NAnt或MSBuild任务来获取CruiseControl构建标签号,并在构建解决方案之前覆盖SolutionVersion.cs版本号

这样,我就可以通过CruiseControl构建版本将程序集追溯回代码(更好的是,我通常让CC.net使用相同的编号在源代码控制中标记源代码)


+1 for ccnet. 对于程序集版本,我们使用子版本修订号。对于安装程序,我们有需要强制构建的ccnet项目,因此安装程序的版本基于ccnet构建号。 - Pedro
你是对的,让构建服务器来完成这个任务是最好的选择。虽然链接版本文件已经完成了大部分工作,但如果你使用构建编号,每个dll版本都会在每次构建时更改。从源代码控制中使用rev号似乎更加复杂,并且需要更多的复杂性才能使用特定项目中仅最新的rev号文件。 - jaminto
我放弃了只部署更新的dll的部分部署要求,从新构建中部署所有dll是可以的,并且所有dll都将基于构建号具有更新的版本号。http://www.jetbrains.com/teamcity/现在是我选择的构建服务器,也可能是你的选择。 - jaminto

0

我建议您研究一下您的版本控制系统提供的选项,将修订信息嵌入源文件中。过去我曾经遇到过自动递增的问题,因此我发誓再也不会使用它了。现在,我更喜欢比构建号更具体的东西,并将唯一标识符嵌入到构建系统的每个产品中。

我在自动将Mercurial修订信息嵌入Visual Studio C#项目中描述了我的系统。虽然我的解决方案可能不适合您,但是对于我的问题,还有其他有趣的选项被提出,因此我拒绝的一些解决方案可能仍然对您有用,即使您必须将它们适应您使用的任何版本控制系统。


0

这不完全是你所问的,但我发现在处理大型解决方案时这很有帮助:版本控制构建。根据其文档,它检测您感兴趣的更改: “如果有一个文件具有更近的时间戳(这意味着源代码已在上一个版本更改之后被修改),则该项目将被标记为版本更新。”

推荐的、可支持的解决方案是让您的项目不使用 Visual Studio 的方式自动递增构建号。然后您需要手动或编写一个预构建脚本/ MS Build 任务来执行递增操作。


0

这篇codeproject文章有一个有趣的示例,你应该去看看...它涉及到一个预构建任务,根据一年中的日期更新版本号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接