封裝中的 MSBuild .props 和 .targets

除了較傳統的元件,NuGet 套件有時會將自定義建置目標或屬性新增至取用該套件的專案。 這可以藉由在專案的建置資料夾中新增有效的 MSBuild 檔案 <package_id>.targets<package_id>.props (例如) Contoso.Utility.UsefulStuff.targets來達成。

建置資料夾

隨著 NuGet 的演進,建 .props 置的各種不同資料夾並 .targets 已新增。

Folder NuGet 版本 使用
build 2.5+ 建置專案每個架構的邏輯。
buildMultiTargeting 4.0+ 針對 outer build 以多個架構為目標之專案的 建置邏輯。 僅 PackageReference。
buildTransitive 5.0+ 建置可轉移至任何取用專案之資產的邏輯。 請參閱功能頁面 \(英文\)。 僅 PackageReference。

架構特定組建資料夾

所有 3 個組建資料夾都遵循相同的模式,根據專案目標架構來決定最適合的檔案。

根組建資料夾中的檔案, build/<package_id>.targetsbuild/<package_id>.props 視為適用於所有目標架構。

若要提供架構專屬的檔案,請先將其置於適當的子資料夾中,如下所示:

    \build
        \netstandard1.4
            \Contoso.Utility.UsefulStuff.props
            \Contoso.Utility.UsefulStuff.targets
        \net462
            \Contoso.Utility.UsefulStuff.props
            \Contoso.Utility.UsefulStuff.targets

建議您在適當時使用架構特定的組建資料夾,以避免在套件可能不支援的項目中進行誤判安裝。

請注意,如果套件在 或 ref 資料夾中沒有任何檔案lib,而且只有架構特定組建資料夾下的檔案,該套件會被視為與所有專案相容。 套件工具的最新版本會在建立這類套件時引發 NU5127 警告。

使用組建檔案的套件的專案

PackageReference 專案

.props.targets 不會新增至項目檔,而是透過 {projectName}.nuget.g.targets{projectName}.nuget.g.props提供。 執行還原時,會自動產生這些檔案。

當專案以多個架構為目標時,匯入至這些檔案的條件是目標 Framework 名稱。

MSBuild .props.targets 多重架構目標的檔案可以放在 \buildMultiTargeting 資料夾中。 產生匯入時,會設定 MSBuild 屬性 $(TargetFramework) 空白的條件。

packages.config 專案

當 NuGet 安裝含有 \build 檔案的套件時,會在指向 .targets.props 檔案的專案檔中新增 MSBuild <Import> 項目。 (.props 會在項目檔頂端新增; .targets 會在底部新增 。每個目標架構都會新增個別的條件式 MSBuild <Import> 專案。

使用 MSBuild 屬性和目標撰寫套件

您可以使用下列任何工具,在套件中包含 MSBuild .props.targets

MSBuild 屬性和目標內容的指引

NuGet 不會限制您撰寫 .props 的方式, .targets 因為它們會根據套件作者和目標專案本身的需求而有所不同。

套件和 .props.targets中不能執行一些動作,例如未指定會影響還原的屬性和專案,因為這些專案會自動排除。

  • 不可新增或更新的屬性範例:TargetFramework、TargetFrameworkMoniker、TargetPlatformMoniker、AssetTargetFallback 等。

  • 某些不可新增或更新的項目範例:PackageReference、PackageVersion、PackageDownload 等等。