91 votes

avertissement de restauration de dotnet NU1701

J'utilise .NET Core avec C#, et quand j'ai fait dotnet restore il a donné l'erreur suivante :

PS C:\workspace\Arbitrator > dotnet restore

C:\workspace\Arbitrator\Arbitrator.csproj : avertissement NU1701 : Le paquet 'PusherClient 0.5.0' a été restauré en utilisant '.NETFramework,Version=v4.6.1' au lieu du framework cible du projet '.NETCoreApp,Version=v2.0'. Cela peut causer des problèmes de compatibilité. C:\workspace\Arbitrator\Arbitrator.csproj : avertissement NU1701 : Le paquet 'WebSocket4Net 0.14.1' a été restauré en utilisant '.NETFramework,Version=v4.6.1' au lieu du cadre cible du projet '.NETCoreApp,Version=v2.0'. Cela peut causer des problèmes de compatibilité.

Le paquet en question est PusherClient . J'ai simplement suivi les documents NuGet pour l'importer. Comment puis-je corriger cet avertissement ?

123voto

Sourcerer Points 714

Vous n'avez pas nécessairement besoin d'attendre PusherClient est mis à jour pour .NET Core.

La référence à .NET Framework 4.6.1 (et inférieur) à partir de .NET Core est une nouvelle fonction disponible depuis .NET Core/Standard 2.0 preview 2 / VS 2017 preview 15.3, et selon MS, on peut considérer qu'il s'agit d'une fonction qui vous aide à faire migrer le code de .NET Framework vers .NET Standard ou .NET Core au fil du temps. .

  1. Vous pouvez simplement supprimer cet avertissement

    • pour un paquet spécifique

      <PackageReference Include="Contoso.Base.API" Version="1.0.3"> <NoWarn>NU1701</NoWarn> </PackageReference>

    • pour tous les paquets

      <NoWarn>NU1701</NoWarn>

    Voir les scénarios 2 et 3 dans le wiki NuGet pour les façons de le faire à partir de l'interface graphique. .

    Il est cependant possible que votre application échoue en cours d'exécution lorsque vous appelez une API (comme quelque chose de WPF) qui n'est pas supportée par .NET Core. Une autre raison d'un échec pourrait être les API natives natives, éventuellement utilisées par PusherClient . Vous devez donc le tester de manière approfondie. Mais dans la plupart des cas, elle fonctionnera sur toutes les plateformes où .NET Core est supporté (par exemple, j'ai testé une application avec MathNet.Numerics et cela a fonctionné sous Linux même si MathNet.Numerics est également .NET Framework 4.6.1).

  2. Si vous n'avez pas besoin que votre application soit multiplateforme, changez simplement son cadre cible pour .NET 4.6.1 en ajoutant ce qui suit à votre fichier csproj :

     <TargetFramework>net461</TargetFramework>

1 votes

Est-il possible de supprimer cet avertissement ?

10 votes

Oui, mettez <PropertyGroup><NoWarn>NU1701</NoWarn></PropertyGroup> dans votre csproj

0 votes

Je ne vois pas de moyen de supprimer l'avertissement par PackageReference dans le .csproj fichier. J'ai trouvé une question ouverte sur ce même sujet : github.com/NuGet/Home/issues/5740 . Votez :)

47voto

Chris M. Points 552

En passant, ne faites pas ça :

<PropertyGroup>
  <NoWarn>NU1701</NoWarn>
</PropertyGroup>

En faisant cela, vous briserez tous les autres paramètres de NoWarn qui ont été récupérés ailleurs, comme dans un fichier directory.build.prop. A la place, faites ceci :

<PropertyGroup>
  <NoWarn>$(NoWarn);NU1701</NoWarn>
</PropertyGroup>

De cette façon, tous les paramètres globaux sont préservés.

0 votes

Cela devrait être suffisant pour être à l'intérieur d'un <PackageReference> pourtant, ne devrait-elle pas ?

0 votes

Cela dépend vraiment. Ma solution, qui est assez vaste, fait un usage intensif du fichier Directory.Build.Props pour définir des paramètres communs à tous les projets. L'un de ces paramètres est une liste d'avertissements à supprimer. Dans ce cas, sans le $(NoWarn), ce projet remplace cette liste et n'a que le seul NU1707 à supprimer.

8voto

D.R. Points 3411

Pour .NET Core 1.x :

Vous devez dire aux gars de PusherClient de rendre leur projet compatible avec .NET-Core.

0 votes

Pourquoi la bibliothèque n'est-elle pas prête pour .NET-Core ? Elle est déjà dans nuget.org, donc je pense que l'on peut l'utiliser ?

1 votes

@fluter PusherClient est une bibliothèque .Net Framework. Pour l'utiliser sur .Net Core 1.x, il faudrait la transformer en bibliothèque .Net Standard 1.x.

1 votes

@fluter Mais selon l'EM La version 2.0 de .NET Core offre la possibilité de référencer les bibliothèques .NET Framework 4.6.1 (et inférieures).

5voto

Riddick Points 1198

Comme Yair l'a souligné, il existe un problème ouvert à ce sujet sur GitHub : github.com/NuGet/Home/issues/5740 .

Lorsque la dépendance résolue avec une version de repli du framework est transitive, la suppression de l'avertissement pour le paquet référencé ne fonctionnera pas.

Par exemple, Microsoft.TeamFoundationServer.ExtendedClient dépend de Microsoft.AspNet.WebApi.Core qui n'est pas compatible avec .NET Core 3.0, ce qui entraîne l'avertissement. L'ajout de NoWarn à Microsoft.TeamFoundationServer.ExtendedClient ne fonctionnera pas.

Comme solution de rechange (Vous pouvez voir mon post ici : Solution de contournement sur le numéro GitHub ), vous pouvez directement faire référence à la dépendance transitive et utiliser NoWarn contre ce paquet.

<ItemGroup>
    <PackageReference Include="Microsoft.AspNet.WebApi.Core" Version="5.2.3" NoWarn="NU1701" />
    <PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="16.153.0"/>
</ItemGroup>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X