dotnet-herstelwaarschuwing NU1701

Ik gebruik .NET Core met C#, en toen ik dotnet restoredeed, gaf het de volgende foutmelding:

PS C:\workspace\Arbiter> dotnet herstellen

C:\workspace\Arbitrator\Arbitrator.csproj : waarschuwing NU1701: Pakket ‘PusherClient 0.5.0’ is hersteld met ‘.NETFramework,Version=v4.6.1’ in plaats van het projectdoelframework ‘.NETCoreApp,Version=v2. 0’. Dit kan compatibiliteitsproblemen veroorzaken.
C:\workspace\Arbitrator\Arbitrator.csproj : waarschuwing NU1701: Pakket ‘WebSocket4Net 0.14.1’ is hersteld met ‘.NETFramework,Version=v4.6.1’ in plaats van het projectdoelframework ‘.NETCoreApp,Version=v2.0’. Dit kan compatibiliteitsproblemen veroorzaken.

Dit pakket met problemen is PusherClient. Ik volgde gewoon de NuGet-documenten om het te importeren. Hoe kan ik deze waarschuwing oplossen?


Antwoord 1, autoriteit 100%

U hoeft niet per se te wachten tot PusherClientis geüpgraded voor .NET Core.

Verwijzend naar .NET Framework 4.6.1 (en lager) van .NET Core is een nieuwe functiebeschikbaar sinds .NET Core/Standard 2.0 preview 2 / VS 2017 preview 15.3, en volgens MS, kan het worden gezien als een functie waarmee u .NET Framework-code in de loop van de tijd kunt migreren naar .NET Standard of .NET Core.

  1. Je kunt deze waarschuwing gewoon onderdrukken

    • voor een specifiek pakket
    <PackageReference Include="Contoso.Base.API" Version="1.0.3">
         <NoWarn>NU1701</NoWarn>
     </PackageReference>
    
    • voor alle pakketten
    <NoWarn>NU1701</NoWarn>
    

    Zie scenario 2 en 3 in NuGet-wiki voor manieren om het te doen vanuit de GUI.

    Het is echter mogelijk dat uw toepassing tijdens runtime mislukt
    wanneer u een API aanroept (zoals iets van WPF) die niet wordt ondersteund
    door .NET Core. Een andere reden voor een storing kunnen native API’s zijn
    mogelijk gebruikt door PusherClient. Je moet het dus uitgebreid testen.
    Maar in de meeste gevallen werkt het gewoon op alle platforms waar .NET Core
    wordt ondersteund (ik heb bijvoorbeeld een applicatie getest met
    MathNet.Numericsafhankelijkheid en het werkte op Linux, hoewel
    MathNet.Numericsis ook .NET Framework 4.6.1).

  2. Als je app niet platformonafhankelijk hoeft te zijn, verander dan gewoon het doelframework naar .NET 4.6.1 door het volgende toe te voegen aan je csproj-bestand:

    <TargetFramework>net461</TargetFramework>
    

Antwoord 2, autoriteit 34%

Als een kanttekening, doe dit niet:

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

Als je dat doet, worden andere NoWarn-instellingen verbroken die elders worden opgehaald, zoals uit een directory.build.prop-bestand. Doe in plaats daarvan dit:

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

Op die manier blijven alle algemene instellingen behouden.


Antwoord 3, autoriteit 8%

Voor .NET Core 1.x:

Je moet de jongens van PusherClient vertellen dat ze hun project .NET-Core klaar moeten maken.


Antwoord 4, autoriteit 5%

Zoals Yair opmerkte, is er een openstaand probleem over dit onderwerp op GitHub: github.com /NuGet/Home/issues/5740.

Als de afhankelijkheid die wordt opgelost met een fallback framework-versie transitief is, zal het onderdrukken van de waarschuwing voor het pakket waarnaar wordt verwezen niet werken.

Microsoft.TeamFoundationServer.ExtendedClient is bijvoorbeeld afhankelijk van Microsoft.AspNet.WebApi.Core, dat niet compatibel is met .NET Core 3.0, wat resulteert in de waarschuwing. NoWarn toevoegen aan Microsoft.TeamFoundationServer.ExtendedClient werkt niet.

Als tijdelijke oplossing (u kunt mijn bericht hier bekijken: Oplossing voor GitHub-probleem ), kunt u direct verwijzen naar de transitieve afhankelijkheid en NoWarn gebruiken tegen dat pakket.

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

Other episodes