/* * Method: PostBuildBuilder * * Build a project file that mimics the fairly complex way we plan to use OnError * to handle all the different combinations of project failures and post-build * conditions. * */ private static string PostBuildBuilder ( string controlFlag, // On_Success, Always, Final_Output_Changed FailAt failAt ) { string compileStep = ""; if (FailAt.Compile == failAt) { compileStep = "<Error Text='Compile-step-failed'/>"; } string generateSatellites = ""; if (FailAt.GenerateSatellites == failAt) { generateSatellites = "<Error Text='GenerateSatellites-step-failed'/>"; } return(String.Format(ObjectModelHelpers.CleanupFileContents(@" <Project DefaultTargets='Build' ToolsVersion='msbuilddefaulttoolsversion' xmlns='msbuildnamespace'> <PropertyGroup> <Flag>{0}</Flag> </PropertyGroup> <Target Name='ResGen'> <Message Text='ResGen-was-called.'/> </Target> <Target Name='Compile'> <Message Text='Compile-was-called.'/> <RemoveDir Directories='c:\__Hopefully_Nonexistent_Directory__'/> {1} <CreateItem Include='Yes'> <Output TaskParameter='Include' ItemName='FinalOutputChanged'/> </CreateItem> </Target> <Target Name='GenerateSatellites'> <Message Text='GenerateSatellites-was-called.'/> {2} </Target> <Target Name='PostBuild'> <Message Text='PostBuild-was-called.'/> </Target> <Target Name='PostBuildOnSuccess' Condition=""'$(Flag)'!='Final_Output_Changed'"" DependsOnTargets='PostBuild'> <Message Text='PostBuildOnSuccess-was-called.'/> </Target> <Target Name='PostBuildOnOutputChange' Condition=""'$(Flag)_@(FinalOutputChanged)'=='Final_Output_Changed_Yes'"" DependsOnTargets='PostBuild'> <Message Text='PostBuildOnOutputChange-was-called.'/> </Target> <Target Name='CoreBuildSucceeded' DependsOnTargets='PostBuildOnSuccess;PostBuildOnOutputChange'> <Message Text='CoreBuildSucceeded-was-called.'/> </Target> <Target Name='CoreBuild' DependsOnTargets='ResGen;Compile;GenerateSatellites'> <Message Text='CoreBuild-was-called.'/> <OnError Condition=""'$(Flag)'=='Always'"" ExecuteTargets='PostBuild'/> <OnError ExecuteTargets='PostBuildOnOutputChange'/> </Target> <Target Name='Build' DependsOnTargets='CoreBuild;CoreBuildSucceeded'> <Message Text='Build-target-was-called.'/> </Target> </Project> "), controlFlag, compileStep, generateSatellites)); }
/* * Method: PostBuildBuilder * * Build a project file that mimics the fairly complex way we plan to use OnError * to handle all the different combinations of project failures and post-build * conditions. * */ private static string PostBuildBuilder ( string controlFlag, // On_Success, Always, Final_Output_Changed FailAt failAt ) { string compileStep = ""; if (FailAt.Compile == failAt) { compileStep = "<Error Text='Compile-step-failed'/>"; } string generateSatellites = ""; if (FailAt.GenerateSatellites == failAt) { generateSatellites = "<Error Text='GenerateSatellites-step-failed'/>"; } return String.Format(ObjectModelHelpers.CleanupFileContents(@" <Project DefaultTargets='Build' ToolsVersion='msbuilddefaulttoolsversion' xmlns='msbuildnamespace'> <PropertyGroup> <Flag>{0}</Flag> </PropertyGroup> <Target Name='ResGen'> <Message Text='ResGen-was-called.'/> </Target> <Target Name='Compile'> <Message Text='Compile-was-called.'/> <RemoveDir Directories='c:\__Hopefully_Nonexistent_Directory__'/> {1} <CreateItem Include='Yes'> <Output TaskParameter='Include' ItemName='FinalOutputChanged'/> </CreateItem> </Target> <Target Name='GenerateSatellites'> <Message Text='GenerateSatellites-was-called.'/> {2} </Target> <Target Name='PostBuild'> <Message Text='PostBuild-was-called.'/> </Target> <Target Name='PostBuildOnSuccess' Condition=""'$(Flag)'!='Final_Output_Changed'"" DependsOnTargets='PostBuild'> <Message Text='PostBuildOnSuccess-was-called.'/> </Target> <Target Name='PostBuildOnOutputChange' Condition=""'$(Flag)_@(FinalOutputChanged)'=='Final_Output_Changed_Yes'"" DependsOnTargets='PostBuild'> <Message Text='PostBuildOnOutputChange-was-called.'/> </Target> <Target Name='CoreBuildSucceeded' DependsOnTargets='PostBuildOnSuccess;PostBuildOnOutputChange'> <Message Text='CoreBuildSucceeded-was-called.'/> </Target> <Target Name='CoreBuild' DependsOnTargets='ResGen;Compile;GenerateSatellites'> <Message Text='CoreBuild-was-called.'/> <OnError Condition=""'$(Flag)'=='Always'"" ExecuteTargets='PostBuild'/> <OnError ExecuteTargets='PostBuildOnOutputChange'/> </Target> <Target Name='Build' DependsOnTargets='CoreBuild;CoreBuildSucceeded'> <Message Text='Build-target-was-called.'/> </Target> </Project> "), controlFlag, compileStep, generateSatellites); }