1 / 22

MSBuild Unveiled

MSBuild Unveiled. Peter Schneider MVP Visual Developer – Visual C# MCT, MCSD.NET, MCAD.NET, MCDBA ps@ugwa.net. In This Session…. MSBuild Architecture MSBuild – File Format MSBuild – Tips & Tricks. Abracadabra. VS Build System. Pre build step 0011010101 1110010110 1101100111 0010100111

redell
Download Presentation

MSBuild Unveiled

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MSBuild Unveiled Peter SchneiderMVP Visual Developer – Visual C#MCT, MCSD.NET, MCAD.NET, MCDBAps@ugwa.net

  2. In This Session… • MSBuild Architecture • MSBuild – File Format • MSBuild – Tips & Tricks

  3. Abracadabra VS Build System Pre build step 0011010101 1110010110 1101100111 0010100111 Post build step Produces Authors PROJECT FILE - $%#^$&% - @$#%$^# Final Product Visual Studio .NET 2002/2003 Feeds

  4. Final Product MSBuild Produces Authors Feeds Authors DEVELOPER MSBuild Design Goals PROJECT FILE <Project> <Property … /> <Item … /> <Target … /> </Project>

  5. MSBuild in 5 minutes • The underlying build engine in Visual Studio 2005 • Fully open and published XML file format for describing build • Visual Studio 2005 build is fully customizable • You extend the build by writing managed code (tasks and loggers) • You don’t need the IDE to build Visual Studio projects

  6. MSBuild File Format <Project xmlns=“http://schemas.microsoft.com/developer/msbuild/2003”> <PropertyGroup> <AppName>MyCoolApp</AppName> <DebugSymbols>true</DebugSymbols> <OutputAssembly>$(AppName).exe</OutputAssembly> </PropertyGroup> <ItemGroup> <Compile Include=“Hello.cs” /> <Compile Include=“Program.cs” /> </ItemGroup> <Target Name=“Build”> <Message Text=“Executing Build Target for App $(AppName)” /> <Csc Sources=“@(Compile)” EmitDebugInformation=“$(DebugSymbols)” OutputAssembly=“$(OutputAssembly)”/> </Target> <Import Project=“Microsoft.CSharp.targets” /> </Project>

  7. MSBuild Key Components • Items • Properties • Targets • Tasks

  8. Build Items • Represent Input to the build system • Grouped into Item Collections • Use userdefined CollectionNames • Are used as Parameters for Tasks • Use Include and Exclude Attributes, Wildcards (**,*,?) <ItemGroup> <Compile Include=“Hello.cs” /> <Compile Include=“Program.cs” /> </ItemGroup>

  9. Build Items • Reference ItemGroups with@(ItemCollectionName)Example: • <Csc Sources=„@(Compile)“/> <ItemGroup> <Compile Include=“Hello.cs” /> <Compile Include=“Program.cs” /> </ItemGroup>

  10. Build Item Metadata • Items may contain MetaData <ItemGroup> <Compile Include=“Hello.cs”> <Group>1</Group> </Compile> <Compile Include=“Program.cs”> <Group>2</Group> </Compile> </ItemGroup> • Used for batching <Target Name=“Testbatch”> <Message Text=“@(Compile)” Condition=“ ’%(Group)’ == ‘1’ ”/> </Target>

  11. Well Known Item Meta Data %(FullPath) %(RootDir) %(Filename) %(Extension) %(RelativeDir) %(Directory) %(RecursiveDir) %(Identity) %(ModifiedTime) %(CreationTime) %(AccessedTime) <ItemGroup> <Compile Include=“*.cs” /> </ItemGroup> <Target Name=“BackupSources”> <Copy SourceFiles=“@(Compile)” DestinationFiles=“%(Compile.Filename).bak” /> </Target>

  12. Build Properties • Properties are key/value pairs used to configure builds • Defined in PropertyGroups <PropertyGroup> <Configuration>Debug</Configuration> </PropertyGroup> • Reference Properties with$(Propertyname)e.g. $(Configuration)

  13. Reserved Properties • Some PropertyNames are reserved: • MSBuildProjectDirectory • MSBuildProjectFile • MSBuildProjectExtension • MSBuildProjectFullPath • MSBuildProjectName • MSBuildBinPath • MSBuildProjectDefaultTargets • MSBuildExtensionsPath • Environment Variables are accessible as Properties

  14. Setting Properties • You can set Properties from the commandline MSBuild.exe MyProject.proj /p:Configuration=Debug MSBuild.exe MyProject.proj /p:Configuration=Debug;Another=Test • You can set Properties depending on other properties <DebugType Condition="'$(Flavor)'=='DEBUG'">full</DebugType>

  15. Build Targets • Targets group tasks together in a particular order • Allows sections of the build process to be called individually (Commandline, CallTarget Task) <Target Name=“Compile”> <Csc Sources=“@(SourceFiles)”/> </Target> MSBuild.exe MyProject.proj /t:Compile MSBuild.exe MyProject.proj /t:Clean;Compile

  16. Default Targets • Use DefaultTargets Attribute <Project DefaultTargets=“Compile”> ... </Project> • InitialTargets are executed first <Project InitialTargets=“Clean”> ... </Project>

  17. Incremental Builds • Reduce build time • Only builds targets which are out-of-date or not yet built • Specify Inputs and Outputs of the target <Target Name=“Compile” Inputs = “@(SourceFiles)” Outputs = “HelloWorld.exe” > <Csc Sources=“@(SourceFiles)” OutputAssembly=“HelloWorld.exe”/> </Target>

  18. Build Tasks • A Task is a unit of executable code which performs atomic build operations <Target Name=“MakePublishDirectory”> <Message Text=“Creating Publish Directory”/> <MakeDir Directories=“$(PublishDir)”/> </Target>

  19. Build Task Outputs • Task can return Output mapped to Items or Properties <Target Name="CopyFiles"> <Copy SourceFiles="@(MySourceFiles)" DestinationFolder="@(MyDestFolder)"> <Output TaskParameter="CopiedFiles" ItemName="SuccessfullyCopiedFiles"/> </Copy> <Message Text=“@(SuccessfullyCopiedFiles,”,”)”></Target>

  20. Build Task ContinueOnError • Specify the ContinueOnError Attribute to succeed target for non-critical tasks • Other possibilities: <Target Name=“SampleTarget"> <TaskOne ContinueOnError="false"> </TaskOne> <TaskTwo> </TaskTwo> <OnError ExecuteTargets="OtherTarget" /> </Target>

  21. Project Elements • Use Choose, When, Otherwise Elements <Project xmlns=“http://schemas.microsoft.com/developer/msbuild/2003”> <PropertyGroup> <SampleProperty>Test</SampleProperty> </PropertyGroup> <Choose> <When Condition=“’$(SampleProperty)’ ==‘Test’”> <PropertyGroup> </PropertyGroup> </When> <Otherwise> </Otherwise> </Choose> </Project>

  22. Summary • Properties • Items • Targets • Tasks • Projects

More Related