What is the list of the built-in item meta-data?


Every item declared in an ""MSBuild"" project automatically gets the following well-known metadata attached to it. Most of these are only relevent if the item represents a file on disk. For example, if you had a project file at c:\myproject\consoleapplication.csproj that contained this:

		 [<ItemGroup>]
		     [<MyItem] Include="stuff\Program.cs" />
		 [</ItemGroup>]
	

then this item would automatically have the following item attributes:

NameExample
""%(FullPath)""c:\myproject\stuff\Program.cs
""%(RootDir)""c:\
""%(Filename)""Program
""%(Extension)"".cs
""%(RelativeDir)""stuff\
""%(Directory)""myproject\stuff\
""%(RecursiveDir)"" <empty> (see RecursivedirAttribute for info)
""%(Identity)""stuff\Program.cs
""%(ModifiedTime)""2004-07-01 00:21:31.5073316
""%(CreatedTime)""2004-06-25 09:26:45.8237425
""%(AccessedTime)""2004-08-14 16:52:36.3168743

Things can get a little weird with some kinds of file paths, so here's a fairly complete table of all the corner cases:
Original""%(FullPath)""""%(RootDir)""""%(Directory)""""%(FileName)""""%(Extension)""""%(RelativeDir)""""%(Identity)""
nirvana\nevermind.txt\c:\myproject\nirvana\nevermind.txt\c:\myproject\nirvana\nevermind.txt\<empty><empty>nirvana\nevermind.txt\nirvana\nevermind.txt\
..\nirvana\nevermind.txtc:\nirvana\nevermind.txtc:\nirvana\nevermind.txt..\nirvana\..\nirvana\nevermind.txt
nirvanac:\myproject\nirvanac:\myproject\nirvana<empty><empty>nirvana
nirvana\c:\myproject\nirvana\c:\myproject\nirvana\<empty><empty>nirvana\nirvana\
nirvana\nevermind.txtc:\myproject\nirvana\nevermind.txtc:\myproject\nirvana\nevermind.txtnirvana\nirvana\nevermind.txt
\nirvanac:\nirvanac:\<empty>nirvana<empty>\\nirvana
.\nirvanac:\myproject\nirvanac:\myproject\nirvana<empty>.\.\nirvana
..\nirvanac:\nirvanac:\<empty>nirvana<empty>..\..\nirvana
..\nirvana\c:\nirvana\c:\nirvana\<empty><empty>..\nirvana\..\nirvana\
\c:\c:\<empty><empty><empty>\\
c:\nirvana\nevermind.txtc:\nirvana\nevermind.txtc:\nirvana\nevermind.txtc:\nirvana\c:\nirvana\nevermind.txt
c:\nirvana\c:\nirvana\c:\nirvana\<empty><empty>c:\nirvana\c:\nirvana\
c:\nirvanac:\nirvanac:\<empty>nirvana<empty>c:\c:\nirvana
X:X:\<current dir>\X:\<current dir of X:>\<empty><empty>X:X:
X:\X:\X:\<empty><empty><empty>X:\X:\
\\server\share\\server\share\\\server\share\<empty><empty><empty>\\server\share\\server\share
\\server\share\\\server\share\\\server\share\<empty><empty><empty>\\server\share\\\server\share\
\\server\share\dir\\server\share\dir\\server\share\<empty>dir<empty>\\server\share\\\server\share\dir
\\server\share\dir\\\server\share\dir\\\server\share\dir\<empty><empty>\\server\share\dir\\\server\share\dir\
\\<invalid><invalid><invalid><empty><empty>\\\\
\\server<invalid><invalid><invalid><empty><empty>\\server\\server
\\server\<invalid><invalid><invalid><empty><empty>\\server\ \\server\
\\server\share/\\server\share\\\server\share\<empty><empty><empty>\\server\share\\\server\share/
c:nirvana\nevermind.txtc:\myproject\nirvana\nevermind.txtc:\myproject\nirvana\nevermind.txtc:nirvana\c:nirvana\nevermind.txt
C:\dir1\my.stuff.exeC:\dir1\my.stuff.exec:\dir1\my.stuff.exeC:\dir1\C:\dir1\my.stuff.exe
C:\dir1\nirvana.C:\dir1\nirvanac:\dir1\nirvana<empty>C:\dir1\C:\dir1\nirvana.
C:\dir1\nirvana..C:\dir1\nirvanac:\dir1\nirvana.<empty>C:\dir1\C:\dir1\nirvana..
C:\dir1\nirvana..txtC:\dir1\nirvana…txtc:\dir1\nirvana..txtC:\dir1\C:\dir1\nirvana..txt

Example of %(RelativeDir):


<ItemGroup>
		    <includePaths Include="foo\bar;biz\boz" />
	
</ItemGroup>

<PropertyGroup>
		    [<BasePath>c:\mybase\</BasePath>]
	
</PropertyGroup>

<Target Name="t">
		 <Message Text="@(includePaths->'$(basepath)%(relativedir)%(filename).obj')"/>
	
</Target>

gives c:\mybase\foo\bar.obj;c:\mybase\biz\boz.obj
Microsoft Communities