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:
| Name | Example |
| ""%(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.txt | c:\nirvana\nevermind.txt | c:\ | nirvana\ | nevermind | .txt | ..\nirvana\ | ..\nirvana\nevermind.txt |
| nirvana | c:\myproject\nirvana | c:\ | myproject\ | nirvana | <empty> | <empty> | nirvana |
| nirvana\ | c:\myproject\nirvana\ | c:\ | myproject\nirvana\ | <empty> | <empty> | nirvana\ | nirvana\ |
| nirvana\nevermind.txt | c:\myproject\nirvana\nevermind.txt | c:\ | myproject\nirvana\ | nevermind | .txt | nirvana\ | nirvana\nevermind.txt |
| \nirvana | c:\nirvana | c:\ | <empty> | nirvana | <empty> | \ | \nirvana |
| .\nirvana | c:\myproject\nirvana | c:\ | myproject\ | nirvana | <empty> | .\ | .\nirvana |
| ..\nirvana | c:\nirvana | c:\ | <empty> | nirvana | <empty> | ..\ | ..\nirvana |
| ..\nirvana\ | c:\nirvana\ | c:\ | nirvana\ | <empty> | <empty> | ..\nirvana\ | ..\nirvana\ |
| \ | c:\ | c:\ | <empty> | <empty> | <empty> | \ | \ |
| c:\nirvana\nevermind.txt | c:\nirvana\nevermind.txt | c:\ | nirvana\ | nevermind | .txt | c:\nirvana\ | c:\nirvana\nevermind.txt |
| c:\nirvana\ | c:\nirvana\ | c:\ | nirvana\ | <empty> | <empty> | c:\nirvana\ | c:\nirvana\ |
| c:\nirvana | c:\nirvana | c:\ | <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.txt | c:\myproject\nirvana\nevermind.txt | c:\ | myproject\nirvana\ | nevermind | .txt | c:nirvana\ | c:nirvana\nevermind.txt |
| C:\dir1\my.stuff.exe | C:\dir1\my.stuff.exe | c:\ | dir1\ | my.stuff | .exe | C:\dir1\ | C:\dir1\my.stuff.exe |
| C:\dir1\nirvana. | C:\dir1\nirvana | c:\ | dir1\ | nirvana | <empty> | C:\dir1\ | C:\dir1\nirvana. |
| C:\dir1\nirvana.. | C:\dir1\nirvana | c:\ | dir1\ | nirvana. | <empty> | C:\dir1\ | C:\dir1\nirvana.. |
| C:\dir1\nirvana..txt | C:\dir1\nirvana…txt | c:\ | dir1\ | nirvana. | .txt | C:\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