在构建时注入程序集版本号

时间:2011-03-16 14:54:18

标签: .net msbuild assemblies versioning msbuild-task

我希望在构建时更改C#项目的程序集版本号,方法是将其作为MSBuild命令行上的属性传递。

AssemblyInfo Task将在编译之前修改AssemblyInfo.cs中的程序集版本。这几乎是我想要的。问题是我不希望因源控制问题而更改AssemblyInfo.cs。我不希望所有这些AssemplyInfo.cs文件显示为被修改,并且每次我们进行构建时都需要进行检查。

我想要的是在编译后更改程序集版本号的“事物” - 可能使用后构建编织任务。这样的“事物”是否已经作为开源或零售产品存在?如果没有,有人可以指出我编写post build weaver任务的文档吗?

5 个答案:

答案 0 :(得分:7)

由于AssemblyVersion在编译时确实已经进入程序集,因此具有当前内部版本号的AssemblyInfo.cs文件确实属于源代码管理。

如果您在源代码管理中存储它的问题是因为您不需要更新大量需要更新的文件,请尝试此操作。

您可以在解决方案中建立链接,以便所有项目都指向单个文件,例如SharedAssemblyInfo.cs。这是一个描述这个过程的页面:

http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx

您可以使用已知的AssemblyInfo task来使用SharedAssemblyInfo.cs文件,这将是唯一需要检入源代码管理的文件。

答案 1 :(得分:3)

您可以使用WriteCodeFragment任务为每个构建生成一个新的源文件(名为_AssemblyInfo.cs),该文件不在源代码管理中且仅包含AssemblyVersion属性。正常将_AssemblyInfo.cs文件添加到项目中,并在构建步骤之前执行的自定义目标中生成它。在构建它之后,这比操纵组件更具侵入性。

答案 2 :(得分:1)

尝试在AssemblyInfo.cs文件中设置AssemblyVersion,如下所示:

[assembly: AssemblyVersion("1.0.*")]

如果发生了变化,它应该在每次构建时增加你的AssemblyVersion。

答案 3 :(得分:0)

最好签入另一个文件并使用http://code.mattgriffith.net/UpdateVersion/或类似的内容从Subversion创建一个AssemblyInfo.cs http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

答案 4 :(得分:0)