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

在C#/Visual Studio 2010中构建标签。创建可由AssemblyInfo.cs中的预处理器/编译器使用的常量,c#,visual-studio,visual-studio-2010,msbuild,c-preprocessor,C#,Visual Studio,Visual Studio 2010,Msbuild,C Preprocessor,我有一个大型的VisualStudio2010解决方案,包含大约25个项目。我们有一个启动批处理文件的自动构建过程,批处理文件在.sln文件中调用msbuild 我们现有的流程(也构建了一些Excel VBA和VB6代码)从源代码管理中检出一个文本文件,增加一个“构建编号”并重新提交。我们需要一个类似的过程来“构建”每个C#项目的AssemblyInfo.cs文件 我可以编写一个小实用程序,解析每个AssemblyInfo,并根据我们已经使用的构建版本文本文件设置AssemblyTitle字段。

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

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

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

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


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

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

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)]
我不想自动增加数字,因为我只想在构建服务器上构建时增加数字,而不是在开发人员正常构建解决方案时。我应该在原来的问题中说明这一点

谢谢


这个问题已经解决了很多次了。至少谷歌“c#increment build number”,并明确说明现有解决方案无法满足您的需求的原因。