Using Contains to Examine MSBuild Properties

Sometimes I see MsBuild scripts which seem to be trying to treat it more as a glorified batch file than a .Net-capable language. Such scripts often go "around the houses" to accomplish something which could be done fairly simply with something like Property Functions.

The kind of thing I mean usually manifests as several declarations of a property, each with a different condition or as multiple error or warning tasks, each trapping the same thing but with slightly different conditions.

Using a Property Function makes this so much more elegant and snappier if you are able to use MsBuild with .Net 4 or 4.5. Here's an example of a Condition checking the content of a property using the String property function Contains.


  <Warning Text="This is a debug build " Condition=" $(Configuration.Contains('Debug')) " />

You can also use static .Net methods like DateTime.Now using this syntax:


    <PropertyGroup>
        <BuildTime>$([System.DateTime]::Now)</BuildTime>
    </PropertyGroup>