自訂所有 .NET 組建

當您想要自訂在特定電腦、虛擬機器或容器上執行的所有組建時,此文章中的技巧會很有用。 例如,當您設定組建伺服器時,您可能需要為伺服器上的所有組建進行全域性的 MSBuild 設定。 原則上,您可以修改全域 Microsoft.Common.TargetsMicrosoft.Common.Props 檔案,但還有更好的方法。 您可以使用特定 MSBuild 屬性並新增特定的自訂 .targets.props 檔案,來影響特定專案型別 (例如所有 C# 專案) 的所有組建。

在標準 .props 和 .targets 檔案前後

若要影響藉由安裝 MSBuild 或 Visual Studio 所控管的所有 C# 或 Visual Basic 組建,請建立 Custom.Before.Microsoft.Common.TargetsCustom.After.Microsoft.Common.Targets 檔案,其中包括將在 Microsoft.Common.targets 之前或之後執行的目標,或建立 Custom.Before.Microsoft.Common.PropsCustom.After.Microsoft.Common.Props 檔案,其中包括將在 Microsoft.Common.props 之前或之後處理的屬性。

您可以使用下列 MSBuild 屬性來指定這些檔案的位置:

  • CustomBeforeMicrosoftCommonProps
  • CustomBeforeMicrosoftCommonTargets
  • CustomAfterMicrosoftCommonProps
  • CustomAfterMicrosoftCommonTargets
  • CustomBeforeMicrosoftCSharpTargets
  • CustomBeforeMicrosoftVisualBasicTargets
  • CustomAfterMicrosoftCSharpTargets
  • CustomAfterMicrosoftVisualBasicTargets

這些屬性的「通用」版本會影響 C# 和 Visual Basic 專案。 您可以在 MSBuild 命令列中設定這些屬性。

msbuild /p:CustomBeforeMicrosoftCommonTargets="C:\build\config\Custom.Before.Microsoft.Common.Targets" MyProject.csproj

警告

每當 Visual Studio 建置型別相符的任何專案時,只要在 MSBuild 資料夾中找到自訂的 .targets.props 檔案,就會使用這些檔案。 這可能會產生非預期的結果,而且若未正確完成,可能會導致 Visual Studio 無法在您的電腦上建置。

取代通用 props 檔案

您也可以使用屬性 AlternateCommonProps 來指定要使用自己的 .props 檔案,而不是 Microsoft.Common.props。 如果您覺得需要藉由直接修改 Microsoft.Common.props 來進行自訂,您可以改為將該檔案的標準版本複製到另一個檔案,然後只在替代版本中進行變更。

您可以依據您的情節來決定最佳方法。 利用 Visual Studio 擴充性,您可以自訂組建系統,並提供安裝和管理自訂的機制。

如果您有專用的組建伺服器,而且想要確保特定目標一律在該伺服器上執行之適當專案型別的所有組建上執行,則使用全域自訂 .targets.props 檔案是合理的。 如果您希望自訂目標只在特定條件適用時執行,請僅在有需要時在 MSBuild 命令列中設定適當的 MSBuild 屬性,藉以使用另一個檔案位置並設定該檔案的路徑。