La versione corrente di .NET SDK non supporta .NET Core 3.0 - Come risolvere Come risolvere un problema di compilazione legato a una errata installazione o configurazione della versione di .NET SDK 3.0 per compilare progetti .NET Core 3

The Current .NET SDK does not support targeting .NET Core 3.0 - Fix

Se vi siete imbattuti in questo post è probabile che siate alle prese con un fastidioso errore del .NET Core SDK durante un tentativo di compilazione o aggiornamento di un progetto .NET Core 3 utilizzando Visual Studio 2017, Visual Studio 2019, la dotnet CLI o altri strumenti similari.

L'errore si manifesta con il seguente messaggio:

Errore NETSDK1045
C:\Program Files\dotnet\sdk\2.0.3\sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(135,5): error : La versione corrente di .NET SDK non supporta .NET Core 3.0 come destinazione. Impostare come destinazione .NET Core 2.0 o una versione precedente oppure usare una versione di .NET SDK che supporta .NET Core 3.0.

Nella versione in lingua inglese:

Error NETSDK1045
The current .NET SDK does not support targeting .NET Core 3.0. Either target .NET Core 2.1 or lower, or use a version of the .NET SDK that supports .NET Core 3.0.
C:\Program Files\dotnet\sdk\2.1.500\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets 137

Il messaggio di cui sopra può presentare qualche minima differenza, a seconda delle versioni di .NET Core SDKs installate sulla nostra macchina. Ad esempio, potrebbe presentarsi nel seguente modo:

C:\Program Files\dotnet\sdk\2.0.3\sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(135,5)
C:\Program Files\dotnet\sdk\2.2.3\sdks\Microsoft.NET.Sdk\build\Microsoft.NET.TargetFrameworkInference.targets(135,5)

... e così via.

Come si può facilmente desumere, il problema è dovuto al fatto che il sistema prova a utilizzare la versione sbagliata dell'SDK .NET Core (2.x) per compilare un progetto configurato per utilizzare il framework .NET Core 3. Per avere una rapida conferma, è sufficiente aprire il file <ProjectName>.csjproj presente nella cartella radice del progetto e controllare la presenza, al suo interno, del seguente elemento:

In questo articolo elencheremo i vari workaround che possono essere utilizzati per risolvere questo problema.

#1. Controllare che il .NET Core 3.x SDK sia installato

Il primo controllo da effettuare può sembrare fin troppo banale, ma è nondimeno necessario: verificare che il sistema disponga di una versione SDK adeguata per compilare il progetto, ovvero il .NET Core SDK 3. Per effettuare questo controllo, aprite una finestra prompt dei comandi e digitate il seguente comando console:

Una volta premuto Invio, sarà visualizzato un elenco di tutte le versioni del SDK installate sulla vostra macchina. Assicuratevi che la versione 3.x sia regolarmente presente, come nel caso della screenshot di seguito:

La versione corrente di .NET SDK non supporta .NET Core 3.0 - Come risolvere
Un elenco di tutte le versioni del .NET Core 3 SDK presenti sul mio sistema.

Se non avete il SDK 3, potete scaricarlo dalla pagina ufficiale di .NET Core 3: una volta scaricato e installato, riprovate a effettuare la compilazione per vedere se l'errore persiste.

Se invece il SDK è presente, verificate se si tratta di una review release oppure no: in caso affermativo, è probabile che il Workaround #2 faccia al caso vostro, quindi correte a leggerlo; in caso contrario, saltate il #2 e andate direttamente al Workaround #3.

IMPORTANTE: assicuratevi di installare la versione corretta dell'SDK (x86/32 bit o x64/64 bit) per il vostro sistema operativo / CPU / progetto.

#2. Abilitare il supporto delle versioni release di .NET Core  SDK

Se state utilizzando una preview release di .NET Core 3, è molto probabile che l'errore dipenda dal fatto che Visual Studio non sia stato configurato per utilizzare l'SDK. Potete verificarlo lanciando Visual Studio e quindi recandovi su Strumenti > Opzioni > Ambiente > Funzionalità in anteprima e assicuratevi che l'opzione "Usa anteprime di .NET Core SDK" sia abilitata.

La versione corrente di .NET SDK non supporta .NET Core 3.0 - Come risolvere

  • Se tale opzione non è abilitata, abilitatela, quindi chiudete tutte le istanze di Visual Studio e le finestre prompt dei comandi eventualmente aperte (importante): una volta fatto, provate nuovamente a compilare il progetto.
  • Se tale opzione è già abilitata, o se il pannello Funzionalità in anteprima non è presente, continuate a leggere.

#3. Utilizzare Visual Studio 2019

L'anteprima di .NET Core 3.01 è stata l'ultima versione di .NET Core 3.0 a supportare Visual Studio 15.9 (meglio noto come Visual Studio 2017): qualsiasi versione successiva di .NET Core 3.0 richiede necessariamente l'utilizzo di VS 16.0+, ovvero di Visual Studio 2019. Nel caso in cui non abbiate VS2019 sul vostro sistema vi consigliamo dunque di installarlo, quindi di provare nuovamente a compilare il progetto

#4. Controllare la variabile di ambiente PATH

Aprite il Pannello di Controllo, quindi recatevi in Sistema > Impostazioni di Sistema Avanzate > Variabili di Ambiente.

La versione corrente di .NET SDK non supporta .NET Core 3.0 - Come risolvere

Una volta lì, controllate le cartelle configurate all'interno della variabile PATH - sia quella presente tra le variabili utente che quella presente nelle variabili di sistema - e assicuratevi che non vi siano riferimenti alle cartelle presenti nel messaggio di errore (come ad esempio,  C:\Program Files\dotnet\sdk\2.0.3\sdks\ ): nel caso in cui vi fossero eliminatele, quindi provate a compilare nuovamente il progetto. L'unica cartella relativa a .NET Core legittimata ad essere presente all'interno delle variabili PATH dovrebbe essere quella della dotnet CLI, ovvero. C:\Program Files\dotnet\ .

#5. Controllare la variabile di ambiente MSBuildSDKsPath

Sempre restando all'interno di Pannello di Controllo > Sistema > Impostazioni di Sistema Avanzate > Variabili di Ambiente, controllate se esiste una variabile MSBuildSDKsPath all'interno delle variabili utente e/o variabili di sistema. In caso affermativo eliminatela pure, quindi provate a compilare nuovamente il progetto.

La versione corrente di .NET SDK non supporta .NET Core 3.0 - Come risolvere

Anziché eliminare la variabile MSBuildSDKsPath potreste anche decidere di impostarla nel modo corretto, puntando alla cartella relativa al percorso di installazione del .NET Core 3.x SDK (recuperabile con il comando CLI mostrato nel Workaround #1). Si tratta però di un modo di procedere che sconsigliamo, in quanto altera il comportamento predefinito della dotnet CLI in assenza di tale variabile: utilizzare sempre l'SDK più recente tra quelli installati, un behavior semplice da ricordare e che risulta essere adeguato per la maggior parte dei casi d'uso. Per questo motivo, consigliamo di ricorrere alla variabile di ambiente MSBuildSDKsPath solo come extrema ratio, qualora tutti i workaround presenti in questo articolo si rivelassero inutili a risolvere il problema.

#6. Controllare la presenza del file global.json

Recatevi nella cartella radice del vostro progetto e controllate se per caso è presente un file global.json: in caso affermativo, apritelo con un editor di testo e controllate se, al suo interno, è presente una impostazione che imposta l'utilizzo di una versione specifica del .NET Core SDK:

Nell'esempio di cui sopra, il file istruisce il compilatore a utilizzare l'SDK 2.1.5 per quel determinato progetto in luogo della versione più recente. Inutile dire che, per risolvere il problema, è possibile modificare quel valore o - meglio ancora, se il file non contiene altre impostazioni utili - eliminare completamente il ile global.json.  Anche in questo caso, come nel Workaround precedente, la presenza del file global.json rappresenta un override che altera il comportamento predefinito della dotnet CLI. Nello specifico, l'utilizzo del file global.json può essere utile quando abbiamo la necessità di compilare diversi progetti con versioni diverse del SDK sullo stesso PC, a patto però che la versione dell'SDK indicata sia quella corretta.

Per ulteriori informazioni sul corretto utilizzo del file global.json consigliamo di dare un'occhiata a questa pagina.

Conclusioni

Per il momento è tutto: spero che questo articolo, così come i workaround elencati, possa essere utile a chiunque si imbatta in questo problema.

Riferimenti

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.