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.
Questo articolo descrive le nuove funzionalità di .NET SDK e gli strumenti per .NET 8.
SDK
Questa sezione contiene i seguenti argomenti secondari:
- Valutazione del progetto basata sull'interfaccia della riga di comando
- Output del build nel terminale
- Percorsi di output semplificati
- Comando 'dotnet workload clean'
- Gli asset di 'dotnet publish' e 'dotnet pack'
-
dotnet restorecontrollo di sicurezza - Motore di template
- Link sorgente
- SDK generato dal codice sorgente
Valutazione del progetto basata sull'interfaccia della riga di comando
MSBuild include una nuova funzionalità che semplifica l'incorpora dei dati di MSBuild in script o strumenti. I nuovi flag seguenti sono disponibili per i comandi dell'interfaccia della linea di comando, ad esempio dotnet publish, per ottenere dati da utilizzare nelle pipeline di CI e altrove.
| Flag | Description |
|---|---|
--getProperty:<PROPERTYNAME> |
Recupera la proprietà MSBuild con il nome specificato. |
--getItem:<ITEMTYPE> |
Recupera gli elementi MSBuild del tipo specificato. |
--getTargetResult:<TARGETNAME> |
Recupera gli output dall'esecuzione della destinazione specificata. |
I valori vengono scritti nell'output standard. Più valori complessi vengono restituiti come JSON, come illustrato negli esempi seguenti.
>dotnet publish --getProperty:OutputPath
bin\Release\net8.0\
>dotnet publish -p PublishProfile=DefaultContainer --getProperty:GeneratedContainerDigest --getProperty:GeneratedContainerConfiguration
{
"Properties": {
"GeneratedContainerDigest": "sha256:ef880a503bbabcb84bbb6a1aa9b41b36dc1ba08352e7cd91c0993646675174c4",
"GeneratedContainerConfiguration": "{\u0022config\u0022:{\u0022ExposedPorts\u0022:{\u00228080/tcp\u0022:{}},\u0022Labels\u0022...}}"
}
}
>dotnet publish -p PublishProfile=DefaultContainer --getItem:ContainerImageTags
{
"Items": {
"ContainerImageTags": [
{
"Identity": "latest",
...
]
}
}
Output di compilazione del terminale
dotnet build ha una nuova opzione per produrre un output di compilazione più modernizzato. Questo output del Terminal Logger raggruppa errori con il progetto da cui provengono, distingue meglio i diversi framework di destinazione per progetti con più destinazioni e fornisce informazioni in tempo reale sulle attività di costruzione. Per acconsentire esplicitamente al nuovo output, usare l'opzione --tl . Per altre informazioni su questa opzione, vedere opzioni di compilazione dotnet.
Percorsi di output semplificati
.NET 8 introduce un'opzione per semplificare il percorso di output e la struttura di cartelle per gli output di compilazione. In precedenza, le app .NET generano un set completo e complesso di percorsi di output per diversi artefatti di compilazione. La nuova struttura del percorso di output semplificata raccoglie tutti gli output di compilazione in un'unica posizione, rendendo più facile per gli strumenti anticipare i risultati.
Per altre informazioni, vedere Layout di output degli artefatti.
dotnet workload clean comando
.NET 8 introduce un nuovo comando per pulire i pacchetti di carico di lavoro che potrebbero essere lasciati tramite diversi aggiornamenti di .NET SDK o Visual Studio. Se si verificano problemi durante la gestione dei carichi di lavoro, provare a usare workload clean per ripristinare in modo sicuro uno stato noto prima di riprovare. Il comando ha due modalità:
dotnet workload cleanEsegue il Garbage Collection del carico di lavoro per carichi di lavoro basati su file o basati su MSI, che pulisce i pacchetti orfani. I pacchetti orfani provengono da versioni disinstallate di .NET SDK o pacchetti in cui i record di installazione per il pacchetto non esistono più.
Se Visual Studio è installato, il comando elenca anche tutti i carichi di lavoro da pulire manualmente usando Visual Studio.
dotnet workload clean --allQuesta modalità è più aggressiva e pulisce ogni pacchetto nel computer che è del tipo di installazione corrente del carico di lavoro SDK (e non da Visual Studio). Rimuove anche tutti i record di installazione del carico di lavoro per il gruppo di funzionalità .NET SDK in esecuzione e di seguito.
dotnet publish e dotnet pack assetti
Poiché i comandi dotnet publish e dotnet pack sono destinati a generare asset di produzione, ora generano asset Release per impostazione predefinita.
L'output seguente illustra il diverso comportamento tra dotnet build e dotnet publishe come ripristinare la pubblicazione Debug degli asset impostando la PublishRelease proprietà su false.
/app# dotnet new console
/app# dotnet build
app -> /app/bin/Debug/net8.0/app.dll
/app# dotnet publish
app -> /app/bin/Release/net8.0/app.dll
app -> /app/bin/Release/net8.0/publish/
/app# dotnet publish -p:PublishRelease=false
app -> /app/bin/Debug/net8.0/app.dll
app -> /app/bin/Debug/net8.0/publish/
Per ulteriori informazioni, vedere 'dotnet pack' utilizza la configurazione Release e 'dotnet publish' utilizza la configurazione Release.
dotnet restore controllo di sicurezza
A partire da .NET 8, è possibile acconsentire esplicitamente ai controlli di sicurezza per verificare la presenza di vulnerabilità note quando vengono ripristinati i pacchetti di dipendenza. Questo controllo genera un report delle vulnerabilità di sicurezza con il nome del pacchetto interessato, la gravità della vulnerabilità e un collegamento all'avviso contenente altri dettagli. Quando si esegue dotnet add o dotnet restore, vengono visualizzati avvisi NU1901-NU1904 per eventuali vulnerabilità rilevate. Per altre informazioni, vedere Controllare le vulnerabilità di sicurezza.
Motore di template
Il motore di modelli offre un'esperienza più sicura in .NET 8 integrando alcune delle funzionalità correlate alla sicurezza di NuGet. I miglioramenti includono:
Impedire il download dei pacchetti dai
http://feed per impostazione predefinita. Ad esempio, il comando seguente non riuscirà a installare il pacchetto modello perché l'URL di origine non usa HTTPS.dotnet new install console --add-source "http://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json"È possibile eseguire l'override di questa limitazione usando il
--forceflag .Per
dotnet new,dotnet new installedotnet new update, verificare la presenza di vulnerabilità note nel pacchetto del modello. Se vengono rilevate vulnerabilità e si desidera procedere, è necessario usare il--forceflag .Per
dotnet new, fornisci informazioni sul proprietario del pacchetto template. La proprietà viene verificata dal portale NuGet e può essere considerata una caratteristica attendibile.Per
dotnet searchedotnet uninstall, indicare se un modello è installato da un pacchetto "trusted", ovvero usa un prefisso riservato.
Collegamento alla fonte
Il collegamento di origine è ora incluso in .NET SDK. L'obiettivo è che raggruppando il collegamento all'origine nell'SDK, invece di richiedere un pacchetto separato, altri pacchetti includeranno queste informazioni per impostazione predefinita.The goal is that by bundling Source Link into the SDK, invece di richiedere un separato <PackageReference> per il pacchetto, più pacchetti includeranno queste informazioni per impostazione predefinita. Queste informazioni miglioreranno l'esperienza dell'IDE per gli sviluppatori.
Annotazioni
Come effetto collaterale di questa modifica, le informazioni sul commit sono incluse nel InformationalVersion valore delle librerie e delle applicazioni compilate, anche quelle destinate a .NET 7 o a una versione precedente. Per ulteriori informazioni, vedere Link alla fonte incluso nel .NET SDK.
SDK di compilazione di origine
La distribuzione Linux costruita con il SDK di source-build ha ora la possibilità di costruire applicazioni indipendenti utilizzando i pacchetti di runtime di source-build. Il pacchetto di runtime specifico della distribuzione è incluso nell'SDK di compilazione di origine. Durante la distribuzione autonoma, viene fatto riferimento a questo pacchetto di runtime in bundle, abilitando così la funzionalità per gli utenti.
Modello di applicazione console AOT nativa
Il modello di app console predefinito include ora il supporto per AOT nativamente. Per creare un progetto configurato per la compilazione AOT, è sufficiente eseguire dotnet new console --aot. La configurazione del progetto aggiunta da --aot ha tre effetti:
- Genera un eseguibile indipendente nativo con AOT nativo quando si pubblica il progetto, ad esempio con
dotnet publisho Visual Studio. - Abilita gli analizzatori di compatibilità per taglio, AOT e singolo file. Questi analizzatori avvisano l'utente di parti potenzialmente problematiche del progetto (se presenti).
- Abilita l'emulazione in fase di debug di AOT in modo che quando si esegue il debug del progetto senza compilazione AOT, si ottiene un'esperienza simile a AOT. Ad esempio, se si usa System.Reflection.Emit in un pacchetto NuGet che non è stato annotato per AOT (e pertanto non è stato rilevato dall'analizzatore di compatibilità), l'emulazione significa che non si avranno sorprese quando si tenta di pubblicare il progetto con AOT.
.NET in Linux
Linee di base di supporto minime per Linux
Le baseline minime di supporto per Linux sono state aggiornate per .NET 8. .NET è progettato per Ubuntu 16.04 per tutte le architetture. Questo aspetto è importante soprattutto per definire la versione minima glibc per .NET 8. .NET 8 non verrà avviato nelle versioni di distribuzione che includono un glibc precedente, ad esempio Ubuntu 14.04 o Red Hat Enterprise Linux 7.
Per altre informazioni, vedere Supporto della famiglia Red Hat Enterprise Linux.
Costruisci il tuo .NET su Linux
Nelle versioni precedenti di .NET è possibile compilare .NET dall'origine, ma è necessario creare un "tarball di origine" dal commit del repository dotnet/installer corrispondente a una versione. In .NET 8 non è più necessario ed è possibile compilare .NET in Linux direttamente dal repository dotnet/dotnet . Questo repository usa dotnet/source-build per compilare runtime, strumenti e SDK .NET. Questa è la stessa build usata da Red Hat e Canonical per compilare .NET.
La compilazione in un contenitore è l'approccio più semplice per la maggior parte delle persone, perché le immagini del dotnet-buildtools/prereqs contenitore contengono tutte le dipendenze necessarie. Per altre informazioni, vedere le istruzioni di compilazione.
Verifica della firma NuGet
A partire da .NET 8, NuGet verifica i pacchetti firmati in Linux per impostazione predefinita. NuGet continua a verificare anche i pacchetti firmati in Windows.
La maggior parte degli utenti non dovrebbe notare la verifica. Tuttavia, se si dispone di un bundle di certificato radice esistente che si trova in /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem, è possibile che vengano visualizzati errori di attendibilità accompagnati dall'avviso NU3042.
È possibile rifiutare esplicitamente la verifica impostando la variabile DOTNET_NUGET_SIGNATURE_VERIFICATION di ambiente su false.
Analisi del codice
.NET 8 include diversi nuovi analizzatori di codice e correzioni per verificare che si usino le API della libreria .NET in modo corretto ed efficiente. La tabella seguente riepiloga i nuovi analizzatori.
| ID regola | Categoria | Description |
|---|---|---|
| CA1856 | Performance | Viene generato quando l'attributo ConstantExpectedAttribute non viene applicato correttamente a un parametro. |
| CA1857 | Performance | Viene generato quando un parametro viene annotato con ConstantExpectedAttribute ma l'argomento specificato non è una costante. |
| CA1858 | Performance | Per determinare se una stringa inizia con un prefisso specificato, è preferibile chiamare String.StartsWith piuttosto che chiamare String.IndexOf e quindi confrontare il risultato con zero. |
| CA1859 | Performance | Questa regola consiglia di aggiornare il tipo di variabili locali, campi, proprietà, parametri del metodo e tipi restituiti da tipi di interfaccia o astratti a tipi concreti, quando possibile. L'uso di tipi concreti porta a codice generato di qualità superiore. |
| CA1860 | Performance | Per determinare se un tipo di collezione ha elementi, è preferibile usare Length, Count o IsEmpty che chiamare Enumerable.Any. |
| CA1861 | Performance | Le matrici costanti passate come argomenti non vengono riutilizzate quando vengono chiamate ripetutamente, il che implica la creazione di una nuova matrice ogni volta. Per migliorare le prestazioni, è consigliabile estrarre la matrice in un campo di sola lettura statico. |
| CA1865-CA1867 | Performance | L'overload della funzione char offre prestazioni migliori per una stringa di un singolo carattere. |
| CA2021 | Reliability | Enumerable.Cast<TResult>(IEnumerable) e Enumerable.OfType<TResult>(IEnumerable) richiedono tipi compatibili per funzionare correttamente. L'estensione e le conversioni definite dall'utente non sono supportate con tipi generici. |
| CA1510-CA1513 | Manutenibilità | Gli throw helper sono più semplici ed efficienti rispetto a un if blocco di codice per costruire una nuova istanza di eccezione. Questi quattro analizzatori sono stati creati per le eccezioni seguenti: ArgumentNullException, ArgumentExceptionArgumentOutOfRangeExceptione ObjectDisposedException. |
Diagnostics
Il C# Hot Reload supporta la modifica dei tipi generici
A partire da .NET 8, il ricaricamento rapido C# supporta la modifica di tipi generici e metodi generici. Quando si esegue il debug di applicazioni console, desktop, per dispositivi mobili o WebAssembly con Visual Studio, è possibile applicare modifiche alle classi generiche e ai metodi generici nel codice C# o nelle pagine Razor. Per altre informazioni, vedere l'elenco completo delle modifiche supportate da Roslyn.