Chris Eargle

Life Student of the Kodefu Arts

Parsing Properties and Items

by chris 6. October 2008 12:32

MSBuild files are loaded and parsed in order. This means that properties and items are in scope if they have been previously defined anywhere within the load chain. Here's an example.

Test.proj

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
    <
PropertyGroup>
        <
HelloWorld>Hello World!</HelloWorld>
    </
PropertyGroup>

    <
ItemGroup>
        <
Files Include="*.*"/>
    </
ItemGroup>

    <
Import Project="Test.properties" />
    
    <
Target Name="Build">
        <
Message Text="$(GotHere)" />        
        <
Message Text="$(FileList)" />        
    </
Target>
    
</
Project>

Test.properties

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
    <
PropertyGroup>
        <
GotHere>Got here, $(HelloWorld)</GotHere>
        <
FileList>@(Files)</FileList>
    </
PropertyGroup>
        
</
Project>

When you run MSBuild test.proj, you will receive the following output.

    Got here, Hello World!
    Test.proj;Test.properties

If you were to move the Import task above the property and item definitions, your results will be different as the HelloWorld property and the Files item collection have not been defined.

This concept is important if you are attempting to break a large build file into smaller files. There may be dependencies between common properties & items and conditional properties & items. Conditional properties and items can be refactored out of the primary script (encapsulate what varies) and still use the common properties and items as long as they are defined before the conditional file is imported.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

msbuild, refactoring

Kodefu

E-mail | Kick it! | DZone it! | del.icio.us
Permalink | Comments (0) | Post RSSRSS comment feed

Related posts

Environment Variables and MSBuildEverything worked fine the last time I gave my MSBuild presentation. There were no changes to my fil...MSBuild ParsingClarification about MSBuild project file parsing.Moving Parts and TimeoutsTroubleshooting timeouts in a changing environment.
Saving the comment

Add comment


(Will show your Gravatar icon)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

January 6. 2009 03:40

Powered by BlogEngine.NET 1.3.1.0
Theme by Mads Kristensen

About the author

Chris Eargle Chris Eargle
Enterprise .NET developer in Columbia, SC.

E-mail me Send mail

Pages

  • Presentations

Twitter Updates

    Recent comments

    • Kicking Off 2009 In Style (2)
      Busby SEO Test wrote: Thanks for the post [More]
    • Kicking Off 2009 In Style (2)
      Justin James wrote: Congrats to both, particularly the C# MVP! I took … [More]
    • MDC Atlanta (6)
      SEO Dubai wrote: I forgot to congratulate you..:) [More]
    • MDC Atlanta (6)
      SEO Dubai wrote: wish you are happy in your new place.. [More]
    • WCF 3.5 Security Guidelines (9)
      Busby SEO Test wrote: nice work man [More]
    • Project Astoria September 2007 CTP Released (1)
      Busby SEO Test Pinay wrote: good luck to the project, i hope it gonna finish q… [More]
    • Load Balancing Header Issue (5)
      Busby SEO Test wrote: Me too [More]
    • WCF 3.5 Security Guidelines (9)
      Busby SEO Test wrote: nice work man [More]
    • WCF 3.5 Security Guidelines (9)
      Busby seo test wrote: Security indeed is very important in web developme… [More]
    • The Path Is Not a Legal Form (5)
      Busby SEO Test wrote: thanks for the information [More]

    Archive

    • 2009
      • January (1)
    • 2008
      • December (5)
      • November (4)
      • October (7)
      • September (8)
      • August (5)
      • July (1)
      • June (1)
      • April (4)
      • March (1)
      • February (4)
      • January (5)
    • 2007
      • December (5)
      • November (1)
      • October (6)
      • September (3)
      • August (1)
      • June (1)

    Tags

    • activex
    • addin
    • ado.net data services
    • ajax
    • architecture
    • asp.net
    • astoria
    • azure
    • beta
    • bug
    • c#
    • champs
    • code camp
    • com
    • community
    • communitycredit
    • consolas
    • continuous integration
    • conversion
    • ctp
    • database
    • deployment
    • design
    • design principles
    • download
    • ebook
    • entity
    • entlib
    • environment variables
    • expression blend
    • fail
    • font
    • framework
    • gadget
    • generics
    • grid
    • guidelines
    • icon
    • ineta
    • interfaces
    • jacksonville
    • lamdba
    • linq
    • linqtosql
    • list
    • live mesh
    • macro
    • mdc
    • mobile
    • msbuild
    • msdn
    • msi
    • mvc
    • mvp
    • powertoy
    • preview
    • properties
    • ray ozzie
    • refactoring
    • regasm
    • russ fustino
    • security
    • serialization
    • silverlight
    • snippet
    • source code
    • sql server
    • sql2008
    • sqlmetal
    • srss
    • starter kit
    • stream
    • string
    • tfs2008
    • trial
    • usability
    • ux
    • vb.net
    • vbscript
    • vista
    • visual studio
    • vs2008
    • wcf
    • web
    • winforms
    • wpf
    • xml

    Categories

    • RSS feed for Bleeding EdgeBleeding Edge (5)
    • RSS feed for Build NinjaBuild Ninja (2)
    • RSS feed for CEDGCEDG (2)
    • RSS feed for GeneralGeneral (1)
    • RSS feed for KodefuKodefu (21)
    • RSS feed for Path NotesPath Notes (10)
    • RSS feed for PresentationPresentation (5)
    • RSS feed for TechniquesTechniques (2)
    • RSS feed for TrainingTraining (5)
    • RSS feed for WeaponsWeapons (4)
    • RSS feed for ZenZen (5)

    Archive

    Blogroll

    • RSS feed for Structure Too BigStructure Too Big
      • Should you buy an exten...
      • WorldMaps Update
      • MSDN Roadshow -- coming...
    • RSS feed for Chris CraftChris Craft
      • Pimp My Phone – D...
      • Pimp My Phone – D...
      • Pimp My Phone – D...
    Download OPML file OPML

    Disclaimer

    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2009

    Sign in