在C#/ Visual Studio 2010中构建标签。创建一个可由AssemblyInfo.cs中的预处理器/编译器使用的常量

时间:2013-09-16 11:30:10

标签: c# visual-studio visual-studio-2010 msbuild c-preprocessor

我有一个包含大约25个项目的大型Visual Studio 2010解决方案。我们有一个自动构建过程,可以启动一个批处理文件,其中包括在.sln文件上调用msbuild。

我们现有的流程(也构建一些Excel VBA和VB6代码)从源代码控制中检出文本文件,增加“内部版本号”并重新提交。我们想要一个类似的过程来“构建标记”每个C#项目的AssemblyInfo.cs文件。

我可以编写一个小实用程序来解析每个AssemblyInfo,并根据我们已经使用的构建版本文本文件设置AssemblyTitle字段。但是,似乎编译器应该能够从常量执行此操作。网上有很多消息来源说C#缺乏一个合适的预处理器,但编译器可以使用#define做类似的事情。

问题:有没有办法在Visual Studio中定义一个从文本文件/命令行参数中提供的位置读取的编译器常量?

这样做会使我们的构建标签例程在添加更多项目时更具可扩展性,并且意味着在源代码管理中更改的文件更少。

1 个答案:

答案 0 :(得分:0)

我找到了一个问题的解决方案,涉及引用包含以下代码的基础项目:

public static class Version
{
    public const string BUILDREVISION = "10.4.0 Build 1";
    public const string BUILDREVISION_ASSEMBLYVERSION = "10.4.0.1";
}

然后每个AssemblyInfo.cs文件包含: -

[assembly: AssemblyTitle("AppName.BuildLabelling v" + 
Version.BUILDREVISION)]

我不想自动增加数字,因为我希望数字只在构建我们的构建服务器时增加,而不是在开发人员正常构建解决方案时。我应该在最初的问题中说清楚。

谢谢,

PW