我有一个用c#编写的VS2008项目,其中包含许多程序集。我想有一个简单的方法来管理所有不同程序集之间的版本号,以及一种自动增加构建号的方法,并将其保存到每个程序集的版本号中。
我猜这是大多数项目的问题所以可能以前已经解决过了?
有关如何简化项目版本资源管理的任何建议吗?
答案 0 :(得分:17)
我在解决方案级别使用.cs文件,该文件由解决方案中包含以下行的所有项目链接:
using System.Reflection;
[assembly : AssemblyVersion("1.2.3.*")]
请务必从项目中的AssemblyInfo文件中删除AssemblyFileVersion
属性。
答案 1 :(得分:10)
将一个文件放入解决方案中,调用此“SolutionInfo.cs”(我假设C#,也可以在VB中工作)。在这里把你所有的属性放在一起。从AssemblyVersionAttribute
开始。
然后在每个项目链接中选择“将现有项目添加到每个项目”,而不是单击“添加”,使用下拉列表添加为链接。
答案 2 :(得分:3)
我们在解决方案级别有一个AssemblyInfoGlobal.cs文件,就像其他答案一样。然后我们在构建脚本中添加一个小应用程序,它接受CruiseControl.net定义的CCNetLabel(并使用defaultLabeller生成标签)并检出全局文件,修改版本号,然后检查全局文件。
我们的一些项目有多个解决方案,因此全局文件位于目录结构中的解决方案级别之上,足够高,以便需要它的所有内容都低于它。
我们还会更新部署项目的版本号 - 这些版本号在VDProj文件中找到,但我不确定您是否会在快速版本中找到它们 - 我认为这是一个完整的Professional向上功能。有些项目有十几个部署项目,但没有简单的方法可以从VDPROJ文件本身外化版本号。 (或者在那里?)
然后构建发生意味着构建的所有输出具有完全相同的版本号,在任何时候我们都可以从MSI或程序集中获取版本,并且我们确切地知道用于构建该输出的源。< / p>
答案 3 :(得分:1)
using System.Reflection; [assembly : AssemblyVersion("1.2.3.*")]
对此进行评论,自动生成的版本号循环。因此,如果您希望版本能够使昨天的版本具有版本1.2.3.X,其中X&lt; X今天的构建然后这不是要走的路。
实现此目的
[assembly : AssemblyVersion("1.2.*")]
这将为您提供版本1.2.X.Y,其中X.Y的组合今天比昨天更大。我猜X.Y分别是日期和时间的函数
答案 4 :(得分:0)
您可以编写自定义MSBuild任务来执行此操作。看看this approach
答案 5 :(得分:0)
您可以在AssemblyInfo.cs中使用星号:
// Version information
[assembly: AssemblyVersion( "1.0.*" )]
它会自动增加您的版本号。在所有程序集之间共享一个数字......我不确定,但也许你在共享文件中使用了所提到的属性。
答案 6 :(得分:0)
我已经使用svnversion MSBuild community tasks 做了类似的事情,我按照说明here虽然我这样做的方式并不跨越多个程序集。