當您在 GitHub、原始檔控制或任何共享程式代碼基底等程式代碼存放庫中使用共用程式代碼時,您可以使用 MSBuild 暫時自定義本機電腦上的組建。 您可能想要暫時重現 Bug 或測試不同的組態,並將這些自定義專案與共用程式代碼存放庫中的檔案分開。 本文說明 MSBuild 中提供的一些組建延伸模組,可讓您建立使用者專屬或僅限本機自定義組建組態。
先決條件
- 使用 MSBuild 建置的 Visual Studio 專案。
使用用戶檔案
您可以使用 $(MSBuildProjectFullPath).user在此內容中也稱為 使用者 檔案,來儲存本機計算機專屬的擴充功能、選項或變數。 使用者檔案不應上傳至原始碼控制系統,並且會在.gitignore自動檢查。 如需更廣泛的變更,請變更專案本身,因此未來的維護人員不需要知道此擴充機制。
在支援的多重目標專案上,使用者檔案會自動匯入內部組建和外部組建,因此您可以在方案內建立此檔案。 如果您正在處理其他類型的組建,您可以在方案內建立使用者檔案,然後在專案檔中匯入該檔案,如下所示:
<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>