A while back I wrote about Reserved Properties in MSBuild 3.5, now its time to update that post to include reserved properties for MSBuild 4.0. There are a number of new properties here is the list:
• MSBuild
• MSBuildBinPath
• MSBuildExtensionsPath
• MSBuildExtensionsPath32
• MSBuildExtensionsPath64
• MSBuildLastTaskResult
• MSBuildNodeCount
• MSBuildOverrideTasksPath
• MSBuildProgramFiles32
• MSBuildProjectDefaultTargets
• MSBuildProjectDirectory
• MSBuildProjectDirectoryNoRoot
• MSBuildProjectExtension
• MSBuildProjectFile
• MSBuildProjectFullPath
• MSBuildProjectName
• MSBuildStartupDirectory
• MSBuildThisFile
• MSBuildThisFileDirectory
• MSBuildThisFileDirectoryNoRoot
• MSBuildThisFileExtension
• MSBuildThisFileFullPath
• MSBuildThisFileName
• MSBuildToolsPath
• MSBuildToolsVersion
If you want to see what the values are you can execute this simple proj file that I created.
For me the results are:
C:\Data\Development\My Code\Community\MSBuild>msbuild ReservedProps02.proj /m /nologo Build started 3/18/2010 12:43:49 AM. 1>Project "C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj" on node 1 (default targets). 1>PrintValues: MSBuild: MSBuildBinPath: C:\Windows\Microsoft.NET\Framework\v4.0.30128 MSBuildExtensionsPath: C:\Program Files (x86)\MSBuild MSBuildExtensionsPath32: C:\Program Files (x86)\MSBuild MSBuildExtensionsPath64: C:\Program Files\MSBuild MSBuildLastTaskResult: true MSBuildNodeCount: 8 MSBuildOverrideTasksPath: MSBuildProgramFiles32: C:\Program Files (x86) MSBuildProjectDefaultTargets: PrintValues MSBuildProjectDirectory: C:\Data\Development\My Code\Community\MSBuild MSBuildProjectDirectoryNoRoot: Data\Development\My Code\Community\MSBuild MSBuildProjectExtension: .proj MSBuildProjectFile: ReservedProps02.proj MSBuildProjectFullPath: C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj MSBuildProjectName: ReservedProps02 MSBuildStartupDirectory: C:\Data\Development\My Code\Community\MSBuild MSBuildThisFile: ReservedProps02.proj MSBuildThisFileDirectory: C:\Data\Development\My Code\Community\MSBuild\ MSBuildThisFileDirectoryNoRoot: Data\Development\My Code\Community\MSBuild\ MSBuildThisFileExtension: .proj MSBuildThisFileFullPath: C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj MSBuildThisFileName: ReservedProps02 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v4.0.30128 MSBuildToolsVersion: 4.0 1>Done Building Project "C:\Data\Development\My Code\Community\MSBuild\ReservedProps02.proj" (default targets ).
If you want to see the correct valus for MSBuildNodeCount make sure to use the /m switch when you invoke msbuild.exe.
I won’t go over these properties in detail here, because they are mostly obvious but I would like to point out a couple really useful properties, those include.MSBuildThisFile
MSBuildThisFileDirectory
MSBuildThisFileDirectoryNoRoot
These properties can be used to locate the path to the file that you are currently in. So if you have a shared .targets file and it will execute an .exe in the same folder you can use the MSBuildThisFileDirectory property to resolve the full path to that tool reliably. This has historically been difficult. See a recent question on Stackoverflow.com about it at How can I get the path of the current msbuild file? If you are not using MSBuild 4.0 and need to resolve the location to a .targets file then see that post for what you will need to do.
Comments are closed.