Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Build entire solution but add global Conditional Compilation Symbols for just one project

I hava a quite complex solution, containing 10 projects aside from Test projects. It is a network of distributed applications & services that communicate using remoting; therefore having the proper referenced assemblies (& versions) is crucial. That's why I want the whole thing to be compiled and schrink-wrapped in ONE build.

One of the applications is a demo/analysis-tool that runs a subprocess of another - much bigger - application based on the user's input and displays the results; That way engineers have a tool to help tweak their settings for "the big computation". Obviously that subprocess is contained in another assembly, and a big part of te results presented to the engineers is generated by

#if ENABLE_TRACE_MATCHING
Trace.WriteLine("Some engineering output");
#endif

My problem is that Conditional Compilation Symbols in the project settings are limited to that project's assembly, and do not propagate over referenced assemblies. How can I configure my build in such a way that all projects will be built without ENABLE_TRACE_MATCHING being defined, except for the one debug/analysis-app project where all referenced projects/assemblies must be compiled with ENABLE_TRACE_MATCHING being defined

I also cannot replace #if ENABLE_TRACE_MATCHING by #if DEBUG, since that would enable a whole lot of different output our engineers wouldn't know how to handle.

Thanks in advance.

PS: If you think my code smells, then I agree. Additionally: It's mostly not my code ;)

like image 890
user588939 Avatar asked Jan 25 '11 11:01

user588939


1 Answers

You need to learn more about Microsoft Build, which is an out-of-the-box Microsoft .NET tool present in any framework's installation.

Using MSBuild you can define these "symbols" (properties) and a batch of commands (targets).

That's you can create a MSBuild script that imports default Visual Studio targets from all projects in your solution, and declare in the script these properties ("symbols").

In fact, the property to set such symbols already exists: "DefineConstants".

So, since you have it, you can have that MSBuild script that provides that property value, re-declaring it there, so, ALL MSBuild targets will be knowing about these symbols.

EDIT: Check this other question too: msbuild, defining Conditional Compilation Symbols

like image 182
Matías Fidemraizer Avatar answered Oct 18 '22 13:10

Matías Fidemraizer