Novità dell'SDK e degli strumenti per .NET 11

Questo articolo descrive le nuove funzionalità e i miglioramenti nell'SDK di .NET per .NET 11. È stato aggiornato per l'ultima volta per l'anteprima 3.

Programmi di installazione sdk più piccoli in Linux e macOS

Le dimensioni del programma di installazione di .NET SDK in Linux e macOS sono state ridotte deduplicando gli assembly usando collegamenti simbolici. I file duplicati .dll e .exe vengono identificati dall'hash del contenuto e sostituiti con collegamenti simbolici che puntano a una singola copia. Ciò influisce sui programmi di installazione tarball, .pkg, .debe .rpm .

L'analisi ha rilevato che 35% della directory SDK è costituito da file duplicati. In Linux x64, si tratta di 816 file totali di 140 MB su disco (53 MB compressi). Sostituendo i duplicati con collegamenti simbolici, l'archivio Linux x64 diminuisce significativamente nelle dimensioni:

Piattaforma Artefatto SDK .NET 10 dimensione (MB) .NET 11 Anteprima 2 (MB) Riduzione
linux-x64 Tarball 230 189 17.8%
linux-x64 deb 164 122 25.6%
linux-x64 Rpm 165 122 26.0%
linux-x64 contenitori Variabile Variabile 8-17%

La deduplicazione di Windows è pianificata per una futura anteprima.

Miglioramenti dell'analizzatore del codice

CA1873: Riduzione del rumore e miglioramento dei messaggi

Sono stati apportati due miglioramenti a CA1873 (Evitare la registrazione dei log potenzialmente costosa):

Riduzione dei falsi positivi: Gli accessi alle proprietà, GetType(), GetHashCode()e GetTimestamp() non vengono più contrassegnati. La diagnostica ora si applica solo al livello di log Informazioni e al di sotto per impostazione predefinita, poiché i percorsi di avvisi, errori e di codice critico sono raramente percorsi frequentemente utilizzati.

Motivi specifici nei messaggi di diagnostica: Il messaggio di diagnostica include ora il motivo per cui è stato contrassegnato un argomento, consentendo di classificare in ordine di priorità gli avvisi da risolvere:

// Before
warning CA1873: Evaluation of this argument may be expensive and unnecessary if logging is disabled

// After
warning CA1873: Evaluation of this argument may be expensive and unnecessary if logging is disabled (method invocation)

I nove motivi specifici sono:

  • Invocazione del metodo
  • Creazione di oggetti
  • creazione di matrici
  • Conversione di boxing
  • Interpolazione di stringhe
  • Espressione di raccolta
  • Creazione di oggetti anonimi
  • Espressione Await
  • Con espressione

Correzioni di bug dell'analizzatore

Analyzer Correzione
CA1515 Correzione di falsi positivi quando sono presenti membri dell'estensione C#
CA1034 Correzione di falsi positivi quando sono presenti membri dell'estensione C#
CA1859 Correzione di una gestione non corretta delle implementazioni di interfaccia predefinite

AnalysisLevel corretto per .NET 11

I progetti con AnalysisLevel=latest usano in modo non corretto le regole dell'analizzatore di .NET 9 anziché le regole previste di .NET 11. Questo problema è stato risolto.

Nuovi avvisi dell'SDK

NETSDK1235: Custom .nuspec con PackAsTool

Viene generato un nuovo avviso quando un progetto imposta PackAsTool=true e specifica una proprietà personalizzata NuspecFile . I pacchetti di strumenti richiedono convenzioni specifiche di layout e di identificatore che in genere vengono violate dai file personalizzati .nuspec.

warning NETSDK1235: .NET Tools do not support using a custom .nuspec file, but the nuspec file 'custom.nuspec' was provided. Remove the NuspecFile property from this project to enable packing it as a .NET Tool.

L'operazione pack continua comunque con un avviso per evitare l'interruzione dei progetti esistenti.

Supporto CLI del filtro di soluzione

dotnet sln ora può creare e modificare i filtri della soluzione (.slnf) direttamente dall'interfaccia della riga di comando. I filtri della soluzione consentono ai repository di grandi dimensioni di caricare o compilare un subset di progetti senza modificare la soluzione principale. Le operazioni supportate rispecchiano i comandi esistenti dotnet sln :

dotnet new slnf --name MyApp.slnf
dotnet sln MyApp.slnf add src/Lib/Lib.csproj
dotnet sln MyApp.slnf list
dotnet sln MyApp.slnf remove src/Lib/Lib.csproj

Applicazioni basate su file distribuite tra i file

Le app basate su file supportano ora una #:include direttiva, quindi è possibile spostare gli helper condivisi in file separati senza rinunciare al flusso di lavoro basato su file:

#:include helpers.cs
#:include models/customer.cs

Console.WriteLine(Helpers.FormatOutput(new Customer()));

Passare variabili di ambiente con dotnet run

dotnet run -e KEY=VALUE passa le variabili di ambiente all'app avviata dalla riga di comando, senza che sia necessario esportare lo stato della shell o modificare i profili di avvio:

dotnet run -e ASPNETCORE_ENVIRONMENT=Development -e LOG_LEVEL=Debug

Le variabili di ambiente passate in questo modo sono disponibili per la logica DI MSBuild come RuntimeEnvironmentVariable elementi.

Miglioramenti di dotnet watch

L'anteprima 3 aggiunge diversi dotnet watch miglioramenti per i cicli di sviluppo locali di lunga durata.

  • Aspire integrazione:dotnet watch ora può integrarsi con gli host delle app Aspire, abilitando flussi di lavoro per il ricaricamento rapido nel modello di applicazione completo Aspire.
  • Ripristino da crash: Quando l'app si arresta in modo anomalo, dotnet watch lo riavvia automaticamente alla successiva modifica pertinente del file.
  • Windows supporto desktop: la gestione di CTRL+C è migliorata per le app desktop Windows, ad esempio Windows Forms e macchine virtuali Windows.

Altri miglioramenti dell'interfaccia della riga di comando

  • dotnet format accetta --framework ora per i progetti con più destinazioni.
  • dotnet test in modalità MTP (Testing Platform) Microsoft supporta ora --artifacts-path.
  • dotnet tool exec e dnx non richiedono più un'approvazione aggiuntiva durante l'esecuzione di strumenti.

Modifiche radicali

.NET 11 include le modifiche di rilievo seguenti nell'SDK:

La destinazione di avvio Mono non è più impostata automaticamente

A partire da .NET 11, .NET SDK non imposta più automaticamente mono come destinazione di avvio per le app di .NET Framework in Linux. Se si fa affidamento su Mono per l'esecuzione, aggiornare la configurazione di avvio per specificare mono in modo esplicito.

Per altre informazioni, vedere Destinazione di avvio Mono non più impostata automaticamente.

Vedere anche