构建整个解决方案,但仅为一个项目添加全局条件编译符号

时间:2011-01-25 11:47:52

标签: c# .net build compilation

我有一个非常复杂的解决方案,除了测试项目之外还包含10个项目。 它是一个分布式应用程序网络。使用远程通信进行通信的服务;因此,具有适当的参考组件(和版本)是至关重要的。这就是为什么我希望在ONE build中编译和包装整个事物。

其中一个应用程序是演示/分析工具,它根据用户的输入运行另一个 - 更大的 - 应用程序的子流程并显示结果;通过这种方式,工程师可以使用工具来帮助调整“大计算”的设置。显然,子进程包含在另一个程序集中,并且向工程师提供的很大一部分结果是由

生成的。
#if ENABLE_TRACE_MATCHING
Trace.WriteLine("Some engineering output");
#endif

我的问题是项目设置中的条件编译符号仅限于该项目的程序集,并且不会在引用的程序集上传播。 我如何配置我的构建,以便在没有定义ENABLE_TRACE_MATCHING的情况下构建所有项目,除了一个debug / analysis-app项目,其中所有引用的项目/程序集必须使用ENABLE_TRACE_MATCHING <编译em>正在定义

我也无法用#if DEBUG替换#if ENABLE_TRACE_MATCHING,因为这样可以实现我们工程师不知道如何处理的大量不同输出。

提前致谢。

PS:如果您认为我的代码闻起来,那么我同意。另外:这主要不是我的代码;)

1 个答案:

答案 0 :(得分:1)

您需要了解有关Microsoft Build的更多信息,Microsoft Build是任何框架安装中现成的开箱即用的Microsoft .NET工具。

使用MSBuild,您可以定义这些“符号”(属性)和一批命令(目标)。

您可以创建一个MSBuild脚本,从解决方案中的所有项目中导入默认的Visual Studio目标,并在脚本中声明这些属性(“符号”)。

实际上,设置此类符号的属性已经存在:“DefineConstants”。

所以,既然你拥有它,就可以拥有提供该属性值的MSBuild脚本,并在那里重新声明它,所以,所有MSBuild目标都将知道这些符号。

编辑: 再检查一下这个问题: msbuild, defining Conditional Compilation Symbols