除了更傳統的元件之外,NuGet 套件有時可能會將自訂建置目標或屬性新增至取用該套件的專案。
這可以透過在專案的組建資料夾內以表單 <package_id>.targets 或 <package_id>.props (例如 Contoso.Utility.UsefulStuff.targets) 新增有效的 MSBuild 檔案來達成。
建置資料夾
隨著 NuGet 的發展,已新增各種用於建置的不同資料夾 .props 和 .targets。
| 資料夾 | NuGet 版本 | 使用 |
|---|---|---|
| 組建 | 2.5+ | 為專案的每個框架建置邏輯。 |
| 建置多目標支持 | 4.0+ | 建置以多個架構為目標的專案的 outer build 邏輯。 僅限 PackageReference。 |
| buildTransitive | 5.0+ | 為可轉移流向任何取用專案的資產建置邏輯。 請參閱功能頁面。 僅限使用 PackageReference。 |
架構特定的建置資料夾
所有 3 個建置資料夾都遵循相同的模式,根據專案目標架構來決定最合適的檔案。
根建置資料夾中的檔案, build/<package_id>.targets 並 build/<package_id>.props 被認為適用於所有目標架構。
若要提供架構特定的檔案,請先將它們放在適當的子資料夾中,例如:
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
建議優先使用特定框架的構建資料夾,以避免在套件不支援的專案中誤安裝。
請注意,如果套件在 or libref 資料夾中沒有任何檔案,而只有架構特定建置資料夾下的檔案,則該套件將被視為與所有專案相容。 最新版本的包裝工具,在建置此類套件時會產生NU5127警告。
使用包含建置檔案的套件的專案
PackageReference 專案
.props 和 .targets 並沒有被新增至專案檔,而是通過 {projectName}.nuget.g.targets 和 {projectName}.nuget.g.props 提供來使用。 執行還原時會自動產生這些檔案。
當專案以多個架構為目標時,匯入這些檔案的條件是目標架構名稱。
MSBuild .props 和 .targets 檔案,為了支援多架構目標,可以放在 \buildMultiTargeting 資料夾中。
產生匯入時,會設定 MSBuild 屬性 $(TargetFramework) 為空的條件。
packages.config 項目
當 NuGet 安裝包含\build檔案的套件時,它會在專案檔案中新增 MSBuild <Import> 元素,指向.targets和.props檔案。 (.props 會新增至專案檔案的頂端, .targets 並新增至底部。會針對每個目標架構新增個別的條件式 MSBuild <Import> 元素。
使用 MSBuild props 和 targets 編寫套件
您可以使用下列任何工具,將 MSBuild .props 和 .targets 套件納入您的套件中。
MSBuild props 和 targets 內容的指導原則
NuGet 不會限制您撰寫 .props 的方式, .targets 因為它們會根據套件作者和目標專案本身的需求而有所不同。
有一些事情不能在套件的 .props 和 .targets 中執行,例如不要指定影響還原的屬性和項目,因為這些內容將自動排除。
一些不得新增或更新的屬性範例:TargetFramework、TargetFrameworkMoniker、TargetPlatformMoniker、AssetTargetFallback 等。
一些不得新增或更新的專案範例:PackageReference、PackageVersion、PackageDownload 等。