Visual studio 一个解决方案配置中的不同预处理器指令

Visual studio 一个解决方案配置中的不同预处理器指令,visual-studio,msbuild,buildconfiguration,Visual Studio,Msbuild,Buildconfiguration,在我们的一个项目中,我们根据特定的客户需求(例如,徽标和about Box)调整部分软件。每个客户都有自己的版本,其中不包括其他客户的详细信息。目前,这是通过预处理器指令和每个客户的单独构建配置来实现的。然而,随着解决方案中项目数量的增加,维护这些配置变得越来越困难(而且也越来越混乱)。本质上,所有配置都是名为“Release X”、“Release Y”、“Release Z”的“Release”构建。它们都是相同的,除了一个用于区分客户构建的预处理器指令(例如,使用适当的应用程序图标)。此外

在我们的一个项目中,我们根据特定的客户需求(例如,徽标和about Box)调整部分软件。每个客户都有自己的版本,其中不包括其他客户的详细信息。目前,这是通过预处理器指令和每个客户的单独构建配置来实现的。然而,随着解决方案中项目数量的增加,维护这些配置变得越来越困难(而且也越来越混乱)。本质上,所有配置都是名为“Release X”、“Release Y”、“Release Z”的“Release”构建。它们都是相同的,除了一个用于区分客户构建的预处理器指令(例如,使用适当的应用程序图标)。此外,配置必须相同,以提供跨构建的一致性

对于构建服务器上的构建,我可以创建一个MSBuild脚本,设置“DefineConstants”属性,并在“Release”配置中构建解决方案。 在VisualStudio中做同样的事情怎么样?我希望开发人员仍然能够在本地为特定客户运行构建(用于调试/测试目的),但我真的希望摆脱针对特定客户的配置。因为如果我在发布版本中更改了某些内容,它就不会直接传播到特定于客户的版本中,我必须对每个版本都重新执行


有什么想法可以简化这些构建吗?

我不完全理解客户需要区分的所有内容,但我有一个类似的挑战,下面是我如何解决的:

1) 如果肯定存在代码差异,那么可以使用预处理器指令来分离代码

2) 您可以在预生成事件中运行生成帮助程序,该事件会写入具有客户特定定义的头文件


3) 使用WiX/heat.exe组装任何特定于客户的构建工件,如图形等。

让我解释一下,我是如何实现目标的。我使用预处理器指令来分离代码。关键在于它们的定义。在VSI下,从配置文件加载它们,在自动构建(TFS)上,它们在构建脚本中设置。 现在我只有两个项目配置,调试和发布。其他一切(特定于客户的构建、代码分析构建等)都由预处理器指令控制。对于服务器构建,我有单独的.proj文件,它设置适当的常量并构建.sln文件。每个.csproj都包含额外的生成脚本(通过Include语句),在该脚本中,我首先覆盖项目属性,以确保所有项目都具有相同的设置(即,对于调试生成,我将DebugSymbols设置为true)。 在这个脚本中,我还在开始编译源代码之前从文件中加载预处理器指令