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

6
我有一个相当复杂的解决方案,除了测试项目外还包含10个项目。这是一个分布式应用程序和服务网络,使用远程通信; 因此,拥有正确的引用程序集(及其版本)至关重要。这就是为什么我希望整个解决方案可以在一个构建中编译和打包的原因。
其中一个应用程序是演示/分析工具,它运行另一个更大的应用程序的子进程,基于用户的输入并显示结果。这样工程师们就有了一个工具来帮助调整他们的设置以进行“大型计算”。显然,该子进程包含在另一个程序集中,并且向工程师呈现的结果的很大一部分是由此生成的。
#if ENABLE_TRACE_MATCHING
Trace.WriteLine("Some engineering output");
#endif

我的问题是项目设置中的条件编译符号仅限于该项目的程序集,而不会传播到引用的程序集。我该如何配置我的构建方式,以便所有项目都将被构建而没有定义ENABLE_TRACE_MATCHING,除了一个调试/分析应用程序项目,在该项目中,所有引用的项目/程序集必须使用已定义ENABLE_TRACE_MATCHING进行编译。
我也不能用#if DEBUG替换#if ENABLE_TRACE_MATCHING,因为那将启用大量不同的输出,我们的工程师不知道如何处理。
提前致谢。
PS:如果您认为我的代码有问题,那么我同意。此外:它大部分不是我的代码;)

我忘了提到:这全部都是C#和.NET 3.5。 - user588939
1个回答

1

您需要更多地了解Microsoft Build,它是任何框架安装中都存在的即用型Microsoft .NET工具。

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

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

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

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

编辑: 还请查看这个问题: msbuild, defining Conditional Compilation Symbols


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接