Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si crea un progetto per la prima volta, è consigliabile creare una libreria di classi .NET Standard, in quanto garantisce la compatibilità con l'ampia gamma di progetti che utilizzano. Usando .NET Standard, per impostazione predefinita si aggiunge il supporto multipiattaforma a una libreria .NET. In alcuni scenari, tuttavia, potrebbe essere necessario includere anche codice destinato a un framework specifico. Questo articolo illustra come eseguire questa operazione per i progetti in stile SDK .
Per i progetti in stile SDK, è possibile configurare il supporto per più framework di destinazioni (TFM) nel file di progetto, quindi usare dotnet pack o msbuild /t:pack per creare il pacchetto.
Annotazioni
nuget.exe CLI non supporta la creazione di pacchetti di progetti in stile SDK, quindi si dovrebbe usare solo dotnet pack o msbuild /t:pack. È consigliabile includere invece tutte le proprietà in genere presenti nel .nuspec file di progetto. Per usare più versioni di .NET Framework in un progetto non in stile SDK, vedere Supporto di più versioni di .NET Framework.
Creare un progetto che supporti più versioni di .NET Framework
Creare una nuova libreria di classi .NET Standard in Visual Studio o usare
dotnet new classlib.È consigliabile creare una libreria di classi .NET Standard per garantire una migliore compatibilità.
Modificare il file con estensione csproj per supportare i framework di destinazione. Ad esempio, modificare
<TargetFramework>netstandard2.0</TargetFramework>A:
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>Assicurarsi di modificare l'elemento XML modificato da singolare a plurale (aggiungere "s" sia ai tag aperti che ai tag di chiusura).
Se si dispone di codice che funziona solo in un tfm, è possibile usare
#if NET45o#if NETSTANDARD2_0per separare il codice dipendente da TFM. Per altre informazioni, vedere How to multitarget.) Ad esempio, è possibile usare il codice seguente:public string Platform { get { #if NET45 return ".NET Framework" #elif NETSTANDARD2_0 return ".NET Standard" #else #error This code block does not match csproj TargetFrameworks list #endif } }Aggiungere i metadati NuGet desiderati a .csproj come proprietà di MSBuild.
Per l'elenco dei metadati del pacchetto disponibili e dei nomi delle proprietà MSBuild, vedere La destinazione del pacchetto. Vedere anche Controllo degli asset di dipendenza.
Se si desidera separare le proprietà correlate alla compilazione dai metadati NuGet, è possibile usare un oggetto diverso
PropertyGroupoppure inserire le proprietà NuGet in un altro file e usare la direttiva diImportMSBuild per includerla.Directory.Build.PropseDirectory.Build.Targetssono supportati anche a partire da MSBuild 15.0.A questo punto, usare
dotnet packe il file .nupkg risultante è destinato sia a .NET Standard 2.0 che a .NET Framework 4.5.
Di seguito è riportato il file con estensione csproj generato usando i passaggi precedenti e .NET Core SDK 2.2.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
<Description>Sample project that targets multiple TFMs</Description>
</PropertyGroup>
</Project>