自訂本機組建

當您在小組中工作時,使用 GitHub、原始檔控制或任何共用程式碼基底等程式碼存放庫,但您想要在本機電腦上自訂群組建,或許可以暫時重現 Bug 或測試不同的組態,讓這些自訂與與共享程式碼存放庫共用的共用專案檔分開是很方便的。 本文說明 MSBuild 中提供的一些組建延伸模組,可讓您進行使用者特定的或僅限本機自訂設定。

.user 檔案

使用 $(MSBuildProjectFullPath).user 也是一選項,在此情況下也稱為 .user 檔案。 此檔案是用來保留本機電腦中特定的擴充功能、選項或變數。 它並不是用來上傳至原始檔控制,並且會在 .gitignore 自動檢查。 針對較大量的變更,建議變更專案本身,如此將來的維護者便不需要了解此擴充機制。

在支援的多目標專案上,.user 檔案會自動匯入至內部和外部組建,因此您可以在方案內直接建立檔案。 如果您處理的是其他類型的組建,仍可使用 .user 檔案。 您可以在方案中建立它,然後匯入至專案檔案。

<Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')"/>

MSBuildExtensionsPath 和 MSBuildUserExtensionsPath

依照慣例,許多核心組建邏輯檔案會在其內容之前匯入

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportBefore\*.targets

,並在之後匯入

$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\{TargetFileName}\ImportAfter\*.targets

。 此慣例可讓已安裝的 SDK 擴增常見專案類型的組建邏輯。

會在 $(MSBuildUserExtensionsPath) 中搜尋相同的目錄結構,這是每位使用者的資料夾 %LOCALAPPDATA%\Microsoft\MSBuild。 放置在該資料夾中的檔案,會針對該使用者認證下執行的對應專案類型的所有組建進行匯入。 使用 ImportUserLocationsByWildcardBefore{ImportingFileNameWithNoDots} 模式設定在匯入檔案後指定的屬性,即可停用使用者延伸模組。 例如,將 ImportUserLocationsByWildcardBeforeMicrosoftCommonProps 設定為 false 可防止匯入 $(MSBuildUserExtensionsPath)\$(MSBuildToolsVersion)\Imports\Microsoft.Common.props\ImportBefore\*

以專案語言為基礎的自訂群組態

如果您需要不同的行為,視 .NET 語言 (C#、Visual Basic 或 F# 而定),您可以新增屬性群組,其條件相依於 $(MSBuildProjectExtension) 中的專案副檔名來定義語言特定屬性及其值。

<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.vbproj'">
   <!-- Put VB-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.fsproj'">
   <!-- Put F#-only property definitions here -->
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildProjectExtension)' == '.csproj'">
   <!-- Put C#-only property definitions here -->
</PropertyGroup>