0

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

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

任何想法如何简化这些构建?

4

2 回答 2

0

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

于 2014-02-11T07:00:58.590 回答
0

我不完全了解您需要按客户分开的所有内容,但我遇到了类似的挑战,这是我解决它的方法:

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

2) 您可以在 Pre-Build Event 中运行构建助手,该事件写入包含客户特定定义的头文件。

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

于 2014-01-31T21:25:34.710 回答