MSBuild 保留和已知屬性

MSBuild 提供一組預先定義的屬性,可儲存專案檔和 MSBuild 二進位檔的相關資訊。 這些屬性的評估方式與其他 MSBuild 屬性相同。 例如,若要使用 MSBuildProjectFile 屬性,請輸入 $(MSBuildProjectFile)

MSBuild 會使用下表中的值預先定義保留和已知的屬性。 保留的屬性不能覆寫,但是已知的屬性可以使用同名的環境屬性、全域屬性或專案檔中宣告的屬性加以覆寫。

保留和已知屬性

本節中的資料表會顯示 MSBuild 預先定義的屬性。 資料表中的範例資料行與下列範例專案檔相關,假設位於 C:\Source\Repos\ConsoleApp1\ConsoleApp1 ,並顯示這些屬性的值在專案檔中存取時,當 MSBuild 叫用時沒有特殊命令列選項,並已安裝 Visual Studio 2019 16.7 版的預覽組建。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
</Project>
屬性 保留或已知 描述 範例
MSBuildBinPath 保留 目前使用之 MSBuild 二進位檔所在的資料夾絕對路徑 (,例如C:\Windows\Microsoft.Net\Framework\ < versionNumber >) 。 如果您必須參考 MSBuild 目錄中的檔案,這個屬性就很有用。

不要在這個屬性中包含結尾的反斜線。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin
MSBuildExtensionsPath 已知 於 .NET Framework 4 中引入:MSBuildExtensionsPathMSBuildExtensionsPath32 兩者的預設值並無差異。 您可以將環境變數 MSBUILDLEGACYEXTENSIONSPATH 設定為非 null 值,藉此啟用舊版中 MSBuildExtensionsPath 之預設值的行為。

在 .NET Framework 3.5 和更早版本中,預設值 MSBuildExtensionsPath 會根據目前進程的位,指向 \Program Files\ 或 \Program Files 下 MSBuild 子資料夾的路徑 (x86) 資料夾。 例如,若是 64 位元電腦上的 32 位元處理序,這個屬性會指向 \Program Files (x86) 資料夾。 若是 64 位元電腦上的 64 位元處理序,這個屬性會指向 \Program Files 資料夾。

不要在這個屬性中包含結尾的反斜線。

這個位置是放置目標檔案的理想位置。 例如,您的目標檔案可以安裝於 \Program Files\MSBuild\MyFiles\Northwind.targets,然後使用下面這個 XML 程式碼匯入專案檔中:

<Import Project="$(MSBuildExtensionsPath)\MyFiles\Northwind.targets"/>
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild
MSBuildExtensionsPath32 已知 \Program Files或 \Program Files 下 MSBuild 子資料夾的路徑, (x86) 資料夾。 路徑一律指向 32 位元電腦上的 32 位元 \Program Files (x86) 資料夾,以及 64 位元電腦上的 \Program Files。 請參閱 MSBuildExtensionsPathMSBuildExtensionsPath64

不要在這個屬性中包含結尾的反斜線。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild
MSBuildExtensionsPath64 已知 \Program Files資料夾下 MSBuild 子資料夾的路徑。 若是 64 位元電腦,這個路徑永遠指向 \Program Files 資料夾。 若是 32 位元電腦,這個路徑是空白的。 請參閱 MSBuildExtensionsPathMSBuildExtensionsPath32

不要在這個屬性中包含結尾的反斜線。
C:\Program Files\MSBuild
MSBuildWarningsAsErrors 已知 要視為錯誤的警告碼清單。 MSB1234;MSB5678
MSBuildWarningsNotAsErrors 已知 警告 -warnAsError 碼清單,即使參數設定為將所有其他警告升階為錯誤,也不應該升階為錯誤。 請注意,如果不是 true,它就沒有任何作用。 MSB1234;MSB5678
MSBuildWarningsAsMessages 已知 要視為訊息的警告碼清單。 MSB1234;MSB5678
MSBuildInteractive 保留 true 如果 MSBuild 是以互動方式執行,則允許使用者輸入。 此設定是由 -interactive 命令列選項所控制。 false
MSBuildLastTaskResult 保留 如果前述工作順利完成且沒有任何錯誤 (即使有警告),則為 true,如果前述工作發生錯誤,則為 false。 通常在工作中發生錯誤時,錯誤會在該專案中最後發生。 因此,這個屬性的值絕不會是 false,但下列情節除外:

- 將 Task 項目 (MSBuild)ContinueOnError 屬性設為 WarnAndContinue (或 true) 或 ErrorAndContinue 時。

- 當 Target 具有 OnError 項目 (MSBuild) 作為子項目時。
true
MSBuildNodeCount 保留 建置時使用的並行處理序數目上限。 這是您在命令列中為 -maxcpucount 指定的值。 如果您已指定 -maxcpucount,但未指定值,則 MSBuildNodeCount 會指定電腦中的處理器數目。 如需詳細資訊,請參閱命令列參考平行建置多個專案 1
MSBuildProgramFiles32 保留 32 位元程式資料夾的位置,例如 C:\Program Files (x86)

不要在這個屬性中包含結尾的反斜線。
C:\Program Files (x86)
MSBuildProjectDefaultTargets 保留 DefaultTargets 項目的 Project 屬性中所指定目標的完整清單。 例如,下列 Project 項目的 MSBuildDefaultTargets 屬性值為 A;B;C

<Project DefaultTargets="A;B;C" >
Build
MSBuildProjectDirectory 保留 專案檔所在目錄的絕對路徑,例如 C:\MyCompany\MyProduct

不要在這個屬性中包含結尾的反斜線。
C:\Source\Repos\ConsoleApp1\ConsoleApp1
MSBuildProjectDirectoryNoRoot 保留 MSBuildProjectDirectory 屬性的值,不包含根磁碟機。

不要在這個屬性中包含結尾的反斜線。
Source\Repos\ConsoleApp1\ConsoleApp1
MSBuildProjectExtension 保留 專案檔的副檔名,包括句點;例如 .proj .csproj
MSBuildProjectFile 保留 專案檔的完整檔名,包括副檔名,例如 MyApp.proj ConsoleApp1.csproj
MSBuildProjectFullPath 保留 專案檔的絕對路徑和完整檔名,包括副檔名,例如 C:\MyCompany\MyProduct\MyApp.proj c:\Source\Repos\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj
MSBuildProjectName 保留 專案檔的檔案名稱,不包括副檔名,例如 MyApp ConsoleApp1
MSBuildRuntimeType 保留 目前執行的執行階段類型。 已在 MSBuild 15 中引入。 在 MSBuild 15 () 之前,可能未定義值,表示 MSBuild 是在桌面 .NET Framework 上執行, FullCore 表示 MSBuild 是在 .NET Core (上執行,例如在 dotnet build) 中,或 Mono 表示 MSBuild 是在 Mono 上執行。 Full
MSBuildStartupDirectory 保留 呼叫 MSBuild 的資料夾絕對路徑。 您可以使用此屬性,在專案樹狀結構中的特定點下方建置所有專案,而不需在每個目錄中建立< dirs.proj >檔案。 而您只會有一個專案,例如 c:\traversal.proj,如下所示:

<Project ...> <ItemGroup> <ProjectFiles Include="$ (MSBuildStartupDirectory) **\*.csproj"/> </ItemGroup> <Target Name="build"> <MSBuild Projects="@(ProjectFiles)"/> </Target> </Project>

若要在樹狀結構中的任何點進行建置,請輸入:

msbuild c:\traversal.proj

不要在這個屬性中包含結尾的反斜線。
c:\Source\Repos\ConsoleApp1
MSBuildThisFile 保留 MSBuildThisFileFullPath 的檔案名稱和副檔名部分。 ConsoleApp1.csproj
MSBuildThisFileDirectory 保留 MSBuildThisFileFullPath 的目錄部分。

在路徑中包含結尾的反斜線。
c:\Source\Repos\ConsoleApp1\ConsoleApp1\
MSBuildThisFileDirectoryNoRoot 保留 MSBuildThisFileFullPath 的目錄部分,不包括根磁碟機。

在路徑中包含結尾的反斜線。
Source\Repos\ConsoleApp1\ConsoleApp1\
MSBuildThisFileExtension 保留 MSBuildThisFileFullPath 的副檔名部分。 .csproj
MSBuildThisFileFullPath 保留 包含執行中目標之專案檔或 targets 檔的絕對路徑。

提示:您可以在目標檔案中指定相對於目標檔 (而不是相對於原始專案檔) 的相對路徑。
c:\Source\Repos\ConsoleApp1\ConsoleApp1\ConsoleApp1.csproj
MSBuildThisFileName 保留 MSBuildThisFileFullPath 的檔案名稱部分,不包含副檔名。 ConsoleApp1
MSBuildToolsPath 保留 與 值 MSBuildToolsVersion 相關聯的 MSBuild 版本安裝路徑。

不要在路徑中包含結尾的反斜線。

這個屬性無法覆寫。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin
MSBuildToolsVersion 保留 用來建置專案的 MSBuild 工具組版本。

注意:MSBuild 工具組包含用來建置應用程式的工作、目標和工具。 工具包括編譯器,例如 csc.exe 和 vbc.exe。 如需詳細資訊,請參閱 Toolset (ToolsVersion) Standard 和自訂工具組組態
Current
MSBuildVersion 保留 用來建置專案的 MSBuild 版本。

這個屬性無法覆寫,否則就會傳回錯誤訊息 MSB4004 - The 'MSBuildVersion' property is reserved, and can not be modified.
16.11.0
MSBuildAssemblyVersion 保留 用來建置專案的 MSBuild 元件版本。 16.0
MSBuildFileVersion 保留 用來建置專案的 MSBuild 元件 4 部分版本。 16.11.0.30701
MSBuildSemanticVersion 保留 用來建置專案的完整 semver 2.0 版 MSBuild 元件。 16.11.0-preview-21302-05+5e37cc992

與 MSBuild 項目發生衝突的名稱

除了上述項目,對應至 MSBuild 語言項目的名稱也無法用於使用者定義的屬性、項目或項目中繼資料:

  • VisualStudioProject
  • 目標
  • PropertyGroup
  • 輸出
  • ItemGroup
  • UsingTask
  • ProjectExtensions
  • OnError
  • ImportGroup
  • Choose
  • Otherwise

另請參閱