Dela via


MSBuild .props och .targets i ett paket

Utöver de mer traditionella sammansättningarna kan NuGet-paket ibland lägga till anpassade byggmål eller egenskaper till projekt som använder paketet. Detta kan uppnås genom att lägga till en giltig MSBuild-fil, i formuläret <package_id>.targets eller <package_id>.props (till exempel Contoso.Utility.UsefulStuff.targets) i projektets byggmappar.

Skapa mappar

Allt eftersom NuGet har utvecklats har olika mappar för build .props och .targets lagts till.

Mapp NuGet-version Använd
build 2.5+ Skapa logik för varje ramverk i ett projekt.
buildMultiTargeting 4.0+ Skapa logik för outer build projekt som är inriktade på flera ramverk. Endast PackageReference.
buildTransitive 5.0+ Skapa logik för tillgångar som flödar transitivt till alla förbrukande projekt. Se funktionssidan . Endast PackageReference.

Ramverksspecifik byggmapp

Alla 3 byggmappar följer samma mönster för att bestämma den lämpligaste filen baserat på projektets målramverk.

Filer i rotversionsmappen build/<package_id>.targets och build/<package_id>.props anses lämpliga för alla målramverk.

Om du vill tillhandahålla ramverksspecifika filer placerar du dem först i lämpliga undermappar, till exempel följande:

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

Föredrar att använda ramverksspecifika byggmappar när det är lämpligt för att undvika falska positiva installationer i projekt som kanske inte stöds av ditt paket.

Observera att om ett paket inte har några filer i mapparna lib eller ref och endast filer under en ramverksspecifik byggmapp anses paketet vara kompatibelt med alla projekt. Senaste versionerna av paketverktygen utlöser NU5127-varningen när sådana paket skapas.

Projekt som förbrukar paket med byggfiler

PackageReference-projekt

.props och .targets läggs inte till i projektfilen utan görs i stället tillgängliga via {projectName}.nuget.g.targets och {projectName}.nuget.g.props. Dessa filer genereras automatiskt när återställningen körs.

När ett projekt riktar in sig på mer än ett ramverk villkoras importen till dessa filer på målramverkets namn.

MSBuild .props och .targets filer för målinriktning för flera ramverk kan placeras i \buildMultiTargeting katalogen. När importen genereras anges ett villkor för att egenskapen $(TargetFramework) MSBuild är tom.

paket.config-projekt

När NuGet installerar ett paket med \build-filer, lägger det till <Import>-element i MSBuild-projektfilen som pekar på .targets och .props-filerna. (.props läggs till överst i projektfilen. .targets läggs till längst ned.) Ett separat villkorsstyrt MSBuild-element <Import> läggs till för varje målramverk.

Redigera paket med MSBuild-rekvisita och mål

Du kan använda något av följande verktyg för att inkludera MSBuild .props och .targets i ditt paket.

Vägledning för innehållet i MSBuild-rekvisita och mål

NuGet begränsar inte hur du skapar .props och .targets eftersom de varierar beroende på paketförfattarens behov och själva målprojekten.

Det finns några saker som inte får göras i paket" .props och .targets, till exempel att inte ange egenskaper och objekt som påverkar återställningen, eftersom de automatiskt undantas.

  • Några exempel på egenskaper som inte får läggas till eller uppdateras: TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback osv.

  • Några exempel på objekt som inte får läggas till eller uppdateras: PackageReference, PackageVersion, PackageDownload osv.