Avviso NuGet NU5128

Scenario 1

Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below:
- Add a dependency group for .NETStandard2.0 to the nuspec

Problema

La lib/<tfm>/ directory o ref/<tfm>/ nel pacchetto contiene almeno un file per il moniker del framework di destinazione (TFM) specificato nel messaggio di avviso. Tuttavia, nessun gruppo di dipendenze esiste per questo TFM nel nuspec file. Ciò può causare che i consumer di pacchetti credano che il pacchetto non sia compatibile con TFM, anche se il pacchetto non ha dipendenze. Se il pacchetto presenta dipendenze non dichiarate, il progetto che usa il pacchetto riscontrerà errori di runtime.

Soluzione

  • Eseguire la destinazione del pacchetto NuGet nel progetto

Se possibile, usare la destinazione del pacchetto MSBuild di NuGet, perché corrisponde automaticamente ai TFM dell'assembly con i gruppi di dipendenze dai framework di destinazione del progetto. Si noti che il progetto deve usare PackageReference per le proprie dipendenze NuGet. Se il progetto usa packages.config, è necessario usare nuget.exe pack e un nuspec file.

  • File modificato nuspec manualmente

Se si usa un file personalizzato nuspec , è consigliabile che ogni TFM per cui lib/ esistano assembly o ref/ che contengano un gruppo di dipendenze corrispondente, anche se le dipendenze sono uguali a quella del TFM compatibile successivo. Ad esempio, se un pacchetto contiene netstandard1.0 assembly e netstandard2.0 e le dipendenze sono uguali per entrambi, è consigliabile elencare entrambi i TFM come gruppi di dipendenze con elementi di dipendenza duplicati.

Si noti che l'identificatore TFM usato nei percorsi dell'assembly usa un formato diverso per l'identificatore TFM usato nei gruppi di dipendenze. Il messaggio di avviso specifica il nome corretto da usare nel gruppo di dipendenze. Se il pacchetto non ha dipendenze per tale framework di destinazione, usare un gruppo vuoto. Ad esempio:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • Rimuovere i lib/ file o ref/

Se non si desidera che il pacchetto sia compatibile con il TFM segnalato, modificare il progetto in modo che nessun file lib/<tfm>/ o ref/<tfm>/ si trovi nel pacchetto per tale TFM. Ad esempio, se l'avviso indica di aggiungere un gruppo di dipendenze per .NETFramework4.7.2 a nuspec, rimuovere eventuali lib/net472/* file e ref/net472/* dal pacchetto.

Scenario 2

Some target frameworks declared in the dependencies group of the nuspec and the lib/ref folder do not have exact matches in the other location. Consult the list of actions below:
- Add lib or ref assemblies for the netstandard2.0 target framework

Problema

Il nuspec file ha un gruppo di dipendenze per il moniker del framework di destinazione (TFM), ma non esistono assembly per questo TFM in lib/ o ref/. Se sono presenti assembly per un TFM compatibile, il pacchetto verrà comunque installato, ma le dipendenze potrebbero non essere corrette per gli assembly usati in fase di compilazione e potrebbero causare l'esito negativo del progetto in fase di esecuzione.

Soluzione

  • Eseguire la destinazione del pacchetto NuGet nel progetto

Se possibile, usare la destinazione del pacchetto MSBuild di NuGet, perché corrisponde automaticamente ai TFM dell'assembly con i gruppi di dipendenze dai framework di destinazione del progetto. Si noti che il progetto deve usare PackageReference per le proprie dipendenze NuGet. Se il progetto usa packages.config, è necessario usare nuget.exe pack e un nuspec file.

  • Modificare manualmente il nuspec file

Aggiungere il tfm segnalato come framework di destinazione aggiuntivo per il quale il progetto viene compilato e aggiungere gli assembly al pacchetto. Se si usa un progetto di stile SDK per più TFM con più destinazioni, le destinazioni del pacchetto MSBuild di NuGet possono aggiungere automaticamente assembly nella cartella corretta lib/<tfm>/ e creare gruppi di dipendenze con i TFM e le dipendenze corretti. Se si usa un progetto di tipo non SDK, sarà probabilmente necessario creare un file di progetto aggiuntivo per il TFM aggiuntivo e modificare il nuspec file per copiare gli assembly di output nel percorso corretto nel pacchetto.

  • Aggiungere un file vuoto _._

Se il pacchetto non contiene assembly, ad esempio un meta-pacchetto, prendere in considerazione l'aggiunta di un file vuoto _._ alle lib/<tfm>/ directory per i TFM elencati nel messaggio di avviso. Ad esempio, se l'avviso indica di aggiungere assembly per il netstandard2.0 framework di destinazione, creare un file vuoto lib/netstandard2.0/_._ nel pacchetto.

  • Rimuovere il gruppo di dipendenze

Se si usa un file personalizzato nuspec , rimuovere il gruppo di dipendenze per il TFM segnalato, lasciando solo i gruppi di dipendenze per i TFM per i quali lib/<tfm>/ sono presenti file o ref/<tfm>/ .

  • Rimuovere tutte le dipendenze per i pacchetti non correlati agli assembly

Se il pacchetto non contiene lib/ file o ref/ e non è un meta-pacchetto, è probabile che non abbia dipendenze necessarie per il consumer del pacchetto. Se si esegue il pacchetto con la destinazione MSBuild Pack di NuGet, è possibile impostare <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> in qualsiasi PropertyGroup file di progetto. Se si usa un file personalizzato nuspec , rimuovere l'elemento <dependencies> .

  • Altri scenari

Questo avviso è stato aggiunto durante lo sviluppo di NuGet 5.3 ed è stato disponibile per la prima volta in .NET Core SDK 3.0 Preview 9. NuGet/Home#8583 tiene traccia di un problema per cui l'avviso è stato generato in troppi scenari. È possibile usare la NoWarn proprietà MSBuild (aggiungere <NoWarn>$(NoWarn);NU5128</NoWarn> a qualsiasi PropertyGroup nel file di progetto). Se sono interessati più progetti, è possibile usare Directory.Build.targets per aggiungere NoWarn automaticamente a tutti i progetti.