Fichiers MSBuild .props et .targets dans un package
En plus des assemblys plus traditionnels, les packages NuGet peuvent parfois ajouter des cibles de génération personnalisées ou des propriétés aux projets qui consomment ce package.
Pour ce faire, ajoutez un fichier MSBuild valide, sous la forme <package_id>.targets
ou <package_id>.props
(par exemple Contoso.Utility.UsefulStuff.targets
) dans les dossiers de génération du projet.
Dossiers de génération
À mesure que NuGet a évolué, différents dossiers .props
et .targets
pour la génération ont été ajoutés.
Dossier | Version de NuGet | Utiliser |
---|---|---|
build | 2.5 + | Logique de génération pour chaque framework au sein d’un projet. |
buildMultiTargeting | 4.0 + | Logique de génération pour les outer build pour les projets qui ciblent plusieurs frameworks. PackageReference uniquement. |
buildTransitive | 5.0 + | Logique de génération pour les ressources transitive qui vont vers n’importe quel projet de consommation. Consultez la page Fonctionnalité. PackageReference uniquement. |
Dossier de génération spécifique au framework
Les trois dossiers de génération suivent le même modèle pour décider du fichier le plus approprié en fonction de la version cible de .Net Framework du projet.
Les fichiers du dossier racine de génération, build/<package_id>.targets
et build/<package_id>.props
, sont considérés comme adaptés pour toutes les versions cibles de .Net Framework.
Pour fournir des fichiers spécifiques au framework, commencez par les placer dans les sous-dossiers appropriés, notamment :
\build
\netstandard1.4
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
\net462
\Contoso.Utility.UsefulStuff.props
\Contoso.Utility.UsefulStuff.targets
Préférez l’utilisation des dossiers de génération spécifiques au framework chaque fois que cela est approprié pour éviter les faux positifs d’installations dans les projets qui pourraient ne pas être pris en charge.
Notez que si les dossiers lib
et ref
du package sont vides, et qu’il n’y a que des fichiers de dossier de génération spécifique à framework, ce package sera considéré comme compatible avec tous les projets. Les versions à jour des outils de pack déclenchent l’avertissement NU5127 lorsque de tels packages sont créés.
Projets consommant des packages avec des fichiers de build
Projets PackageReference
.props
et .targets
ne sont pas ajoutés au fichier projet, mais sont rendus disponible par le biais de {projectName}.nuget.g.targets
et {projectName}.nuget.g.props
. Ces fichiers sont générés automatiquement lors de l’exécution de la restauration.
Lorsqu’un projet cible plusieurs frameworks, les importations dans ces fichiers sont conditionnées sur le nom de la version cible de .Net Framework.
Les fichiers MSBuild .props
et .targets
du ciblage multi-framework peuvent être placés dans le dossier \buildMultiTargeting
.
Lorsque les importations sont générées, une condition indiquant que la propriété MSBuild $(TargetFramework)
est vide, est définie.
projets packages.config
Quand NuGet installe un package avec des fichiers \build
, il ajoute des éléments <Import>
MSBuild au fichier projet pointant vers les fichiers .targets
et .props
. (.props
est ajouté en haut du fichier projet ; .targets
est ajouté en bas.) Un élément MSBuild <Import>
conditionnel distinct est ajouté pour chaque version cible de .Net Framework.
Création de package avec des fichiers MSBuild props et targets
Vous pouvez utiliser l’un des outils suivants pour inclure MSBuild .props
et .targets
dans le package.
Aide pour le contenu des fichiers props et targets MSBuild
NuGet ne limite pas la façon dont vous créez .props
et .targets
, étant donné qu’ils varient en fonction du besoin de l’auteur du package et des projets cibles eux-mêmes.
Il existe quelques éléments qui ne doivent pas être effectués dans les .props
et .targets
du package, par exemple, ne pas spécifier pas les propriétés et les éléments qui affectent la restauration, car ceux-ci seront automatiquement exclus.
Voici quelques exemples de propriétés qui ne doivent pas être ajoutées ou mises à jour : TargetFramework, TargetFrameworkMoniker, TargetPlatformMoniker, AssetTargetFallback, etc.
Voici quelques exemples d’éléments qui ne doivent pas être ajoutés ou mis à jour : PackageReference, PackageVersion, PackageDownload, etc.