Partage via


Avertissement NuGet NU5128

Scénario 1

Certaines versions cibles de .Net Framework déclarées dans le groupe de dépendances du nuspec et le dossier lib/ref n’ont pas de correspondances exactes dans l’autre emplacement. Consultez la liste des actions ci-dessous :

  • Ajoutez un groupe de dépendances pour .NETStandard2.0 dans le nuspec

Problème

L’annuaire lib/<tfm>/ ou ref/<tfm>/ du package contient au moins un fichier pour le moniker de framework cible (TFM) spécifié dans le message d’avertissement. Toutefois, aucun groupe de dépendances n’existe pour ce TFM dans le fichier nuspec. Cela peut amener les consommateurs de packages à croire que le package n’est pas compatible avec le module TFM, même si le package n’a pas de dépendances. Si le package a des dépendances non déclarées, le projet utilisant le package rencontre des erreurs d’exécution.

Solution

  • Exécuter la cible du pack NuGet sur le projet

Si possible, utilisez la cible du pack MSBuild de NuGet, car elle correspond automatiquement aux TFM d’assembly avec des groupes de dépendances à partir des versions cibles de .Net Framework du projet. Notez que votre projet doit utiliser PackageReference pour ses propres dépendances NuGet. Si votre projet utilise packages.config, vous devez utiliser nuget.exe pack et un fichier nuspec.

  • Fichier nuspec modifié manuellement

Si vous utilisez un fichier nuspec personnalisé, nous recommandons que chaque TFM pour lequel des assemblys lib/ ou ref/ existent possède un groupe de dépendances correspondant, même si les dépendances sont identiques au TFM compatible suivant. Par exemple, si un package contient des assemblys netstandard1.0 et netstandard2.0 et que les dépendances sont identiques pour les deux, nous vous recommandons de répertorier les deux modules TFM en tant que groupes de dépendances avec des éléments de dépendance en duplicata.

Notez que l’identifiant de TFM utilisé dans les chemins d’accès d’assembly utilise un format différent de l’identifiant TFM utilisé dans les groupes de dépendances. Le message d’avertissement spécifie le nom approprié à utiliser dans le groupe de dépendances. Si votre package n’a pas de dépendances pour cette version cible de .Net Framework, utilisez un groupe vide. Par exemple :

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • Supprimez les fichiers lib/ ou ref/

Si vous ne souhaitez pas que votre package soit compatible avec le TFM signalé, modifiez votre projet de sorte qu’aucun fichier lib/<tfm>/ ou ref/<tfm>/ ne se trouve dans le package pour ce TFM. Par exemple, si l’avertissement indique d’ajouter un groupe de dépendances pour .NETFramework4.7.2 à nuspec, supprimez tous les fichiers lib/net472/* et ref/net472/* de votre package.

Scénario 2

Certaines versions cibles de .Net Framework déclarées dans le groupe de dépendances du nuspec et le dossier lib/ref n’ont pas de correspondances exactes dans l’autre emplacement. Consultez la liste des actions ci-dessous :

  • Ajouter des assemblys lib ou de référence pour la version cible de netstandard2.0

Problème

Le fichier nuspec a un groupe de dépendances pour le moniker de framework cible (TFM), mais aucun assembly n’existe pour ce TFM danslib/ ou ref/. S’il existe des assemblys pour un TFM compatible, le package est toujours installé, mais les dépendances peuvent être incorrectes pour les assemblys utilisés au moment de la compilation et peuvent entraîner l’échec du projet au moment de l’exécution.

Solution

  • Exécuter la cible du pack NuGet sur le projet

Si possible, utilisez la cible du pack MSBuild de NuGet, car elle correspond automatiquement aux TFM d’assembly avec des groupes de dépendances à partir des versions cibles de .Net Framework du projet. Notez que votre projet doit utiliser PackageReference pour ses propres dépendances NuGet. Si votre projet utilise packages.config, vous devez utiliser nuget.exe pack et un fichier nuspec.

  • Modifier manuellement le fichier nuspec

Ajoutez le TFM signalé comme framework cible supplémentaire pour lequel votre projet est compilé et ajoutez les assemblys au package. Si vous utilisez un projet de style SDK pour plusieurs TFMs multicibles, les cibles du pack MSBuild de NuGet peuvent automatiquement ajouter des assemblys dans le dossier lib/<tfm>/ approprié et créer des groupes de dépendances avec les TFM et les dépendances appropriées. Si vous utilisez un projet de style non SDK, vous devrez probablement créer un fichier projet supplémentaire pour le module TFM supplémentaire et modifier votre fichiernuspec pour copier les assemblys de sortie à l’emplacement approprié dans le package.

  • Ajoutez un fichier _._ vide

Si votre package ne contient aucun assembly, tel qu’un métapackage, envisagez d’ajouter un fichier _._ vide aux répertoires lib/<tfm>/ des TFM répertoriés dans le message d’avertissement. Par exemple, si l’avertissement indique qu’il faut ajouter des assemblys pour le framework cible netstandard2.0, créez un fichier lib/netstandard2.0/_._ vide dans votre package.

  • Supprimer le groupe de dépendances

Si vous utilisez un fichier nuspec personnalisé, supprimez le groupe de dépendances pour le TFM signalé, en laissant uniquement des groupes de dépendances pour TFM pour lesquels existent des fichiers lib/<tfm>/ ou ref/<tfm>/.

  • Supprimer toutes les dépendances pour les packages qui ne sont pas liés aux assemblys

Si votre package ne contient pas de fichiers lib/ ou ref/ et n’est pas un métapackage, il n’a probablement pas de dépendances dont le consommateur du package a besoin. Si vous effectuez l’empaquetage avec la cible MSBuild Pack de NuGet, vous pouvez définir <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> dans n’importe quel PropertyGroup de votre fichier projet. Si vous utilisez un fichier nuspec personnalisé, supprimez l’élément <dependencies>.

  • Autres scénarios

Cet avertissement a été ajouté pendant le développement de NuGet 5.3 et a d’abord été disponible dans la version préliminaire.NET Core SDK 3.0 Preview 9. NuGet/Home#8583 suit un problème dans lequel l’avertissement a été déclenché dans un trop grand nombre de scénarios. Vous pouvez utiliser la NoWarn propriété MSBuild (ajouter <NoWarn>$(NoWarn);NU5128</NoWarn> à n’importe quel PropertyGroup de votre fichier projet). Si vous avez plusieurs projets affectés, vous pouvez utiliser Directory.Build.targets pour ajouter NoWarn automatiquement à tous les projets.