封裝中的 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>.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
建議您在適當時使用架構特定的組建資料夾,以避免在套件可能不支援的項目中進行誤判安裝。
請注意,如果套件在 或 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 等等。