Make CopyOutOfDateMarker an item (expanded later) (#2213)
Make CopyOutOfDateMarker an item (expanded later) (#2213)

PR #2180 caused a performance-test scenario internal to Microsoft to
start failing. The root cause was that the projects in the test
customized $(IntermediateOutputPath) _very_ late, after importing
CSharp.targets (and transitively Common.targets). That meant that the
path stored in $(CopyOutOfDateMarker) was no longer under
$(IntermediateOutputPath), and that the directory wasn't created before
the new code attempted to touch the marker file.

Ideally, projects would set IntermediateOutputPath _before_ importing
common.targets, but that hasn't been strictly required in all cases
before so requiring it now is an unacceptable regression.

The late customization was handled for other intermediate outputs by
defining their paths with items (expanded after all properties are
expanded) rather than properties (expanded in order).

There are other properties defined by using $(IntermediateOutputPath),
$(_GenerateBindingRedirectsIntermediateAppConfig) and
$(WinMDExpOutputPdb). This PR doesn't change those since they weren't
recently regressed.
AndyGerlicher/msbuild,mono/msbuild,sean-gilliam/msbuild,sean-gilliam/msbuild,chipitsine/msbuild,jeffkl/msbuild,sean-gilliam/msbuild,mono/msbuild,cdmihai/msbuild,Microsoft/msbuild,AndyGerlicher/msbuild,rainersigwald/msbuild,AndyGerlicher/msbuild,chipitsine/msbuild,Microsoft/msbuild,cdmihai/msbuild,rainersigwald/msbuild,rainersigwald/msbuild,Microsoft/msbuild,mono/msbuild,jeffkl/msbuild,chipitsine/msbuild,mono/msbuild,Microsoft/msbuild,AndyGerlicher/msbuild,jeffkl/msbuild,rainersigwald/msbuild,cdmihai/msbuild,jeffkl/msbuild,cdmihai/msbuild,chipitsine/msbuild,sean-gilliam/msbuild