我有一个在TFS 2010版本中构建的解决方案。此解决方案及其构建有3个配置集(开发、集成、发布)。我已经将构建设置为构建所有这些,并且它基本上运行良好。
在这个解决方案中,有一个Silverlight项目,它根据正在构建的配置设置不同的条件编译符号,因为每个配置都有不同的web服务URL,如下所示:
private const string STR_WS_EndPoint =
#if INTEGRATION
"Integration_WS_EndPoint";
#elif DEVELOPMENT
"Development_WS_EndPoint";
#elif DEBUG
"Debug_WS_EndPoint";
#else
"Release_WS_EndPoint";
#endif
当我在Visual Studio中构建这些不同的配置时,它会为每个配置选择正确的字符串,但当TFS构建不同的配置后,它们都会以"Release_WS_EndPoint"字符串结束(我使用ILSpy进行了检查),即没有任何条件符号处于活动状态。我如何让TFS构建了解这些编译符号?我不能在构建中使用"MSBuild Arguments"字段,因为正如我所说,它构建了所有不同的配置,所以我需要它像Visual Studio那样使用.csproj编译符号。
我使用XmlPreprocess工具来根据构建配置操作配置文件。它为多个环境/服务器使用一个映射文件。您可以通过Excel编辑映射文件。它很容易使用。在生成后步骤中调用XmlPreprocess,并将配置作为环境参数传递。