Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构建整个解决方案,但仅为一个项目添加全局条件编译符号_C#_.net_Build_Compilation - Fatal编程技术网

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

C# 构建整个解决方案,但仅为一个项目添加全局条件编译符号,c#,.net,build,compilation,C#,.net,Build,Compilation,我有一个相当复杂的解决方案,除了测试项目外,还包含10个项目。 它是一个分布式应用程序和服务的网络,使用远程通信进行通信;因此,拥有正确的引用程序集(和版本)至关重要。这就是为什么我希望整个事情都能被编译,并在一个构建中打包 其中一个应用程序是一个演示/分析工具,它根据用户的输入运行另一个更大的应用程序的子流程,并显示结果;这样,工程师们就有了一个工具来帮助调整他们的“大计算”设置。显然,子流程包含在另一个程序集中,提交给工程师的te结果的很大一部分是由 #if ENABLE_TRACE_MAT

我有一个相当复杂的解决方案,除了测试项目外,还包含10个项目。 它是一个分布式应用程序和服务的网络,使用远程通信进行通信;因此,拥有正确的引用程序集(和版本)至关重要。这就是为什么我希望整个事情都能被编译,并在一个构建中打包

其中一个应用程序是一个演示/分析工具,它根据用户的输入运行另一个更大的应用程序的子流程,并显示结果;这样,工程师们就有了一个工具来帮助调整他们的“大计算”设置。显然,子流程包含在另一个程序集中,提交给工程师的te结果的很大一部分是由

#if ENABLE_TRACE_MATCHING
Trace.WriteLine("Some engineering output");
#endif
我的问题是,项目设置中的条件编译符号仅限于该项目的程序集,并且不会在引用的程序集上传播。 除了一个调试/分析应用程序项目(其中所有引用的项目/程序集都必须使用定义的ENABLE_TRACE_匹配进行编译)之外,我如何配置我的生成,以便在不定义ENABLE_TRACE_匹配的情况下生成所有项目

我也不能用“如果调试”来代替“如果启用跟踪匹配”,因为这将使我们的工程师不知道如何处理大量不同的输出

提前谢谢


PS:如果你认为我的代码有味道,那我同意。另外:它大部分不是我的代码;)

您需要进一步了解Microsoft Build,它是一种现成的Microsoft.NET工具,适用于任何框架的安装

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

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

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

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

编辑: 也请勾选其他问题:

我忘了提到:都是C#和.NET 3.5