Search code examples
c#msbuildcsprojcompiler-directives

How do I test for compiler directives with an MSBuild Condition in a .csproj file?


I am totally new to the functions and conditions in .csproj files so any and all help is appreciated.

What I want to do is check for a specific compiler directive in the current configuration. An example would be something like the following:

<Choose>
    <When Condition= [current configuration has CONST-1 compiler constant defined] >
        ...
    </When>
    <When Condition= [current configuration has CONST-2 compiler constant defined] >
        ...
    </When>
</Choose>

I don't know if this is even possible or not. If there is a better way to do what I am asking let me know that as well. Either way, I want to test for a condition independent of the configuration.

EDIT

What I really want is a value that I can edit easily, preferrably within Visual Studio, that I can also check regargless of the configuraiton. I thought about compiler constants because you can easily change them in the Project Properties in VS.


Solution

  • Compiler constants are set into a property "DefineConstants" so you should just be able to evaluate that property. Your Choose statement needs to go after the PropertyGroups that define the constants or inside a target.

    <Choose>
        <When Condition="$(DefineConstants.Contains(CONST-1))">
            ...
        </When>
        <When Condition="$(DefineConstants.Contains(CONST-2))">
            ...
        </When>
    </Choose>