Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden neue Features im .NET SDK und tools für .NET 8 beschrieben.
SDK
Dieser Abschnitt enthält die folgenden Unterthemen:
- CLI-basierte Projektbewertung
- Ausgabe des Terminalbuilds
- Vereinfachte Ausgabepfade
- Befehl 'dotnet workload clean'
- "dotnet publish"- und "dotnet pack"-Assets
-
dotnet restoreSicherheitsüberwachung - Template-Engine
- Quelllink
- Source-build SDK
CLI-basierte Projektbewertung
MSBuild enthält ein neues Feature, das die Integration von Daten aus MSBuild in Ihre Skripts oder Tools erleichtert. Die folgenden neuen Flags sind für CLI-Befehle wie dotnet publish verfügbar, um Daten zur Verwendung in CI-Pipelines und an anderer Stelle abzurufen.
| Flag | Description |
|---|---|
--getProperty:<PROPERTYNAME> |
Ruft die MSBuild-Eigenschaft mit dem angegebenen Namen ab. |
--getItem:<ITEMTYPE> |
Ruft MSBuild-Elemente des angegebenen Typs ab. |
--getTargetResult:<TARGETNAME> |
Ruft die Ausgaben aus der Ausführung des angegebenen Ziels ab. |
Werte werden in die Standardausgabe geschrieben. Mehrere oder komplexe Werte werden als JSON ausgegeben, wie in den folgenden Beispielen gezeigt.
>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",
...
]
}
}
Ausgabe des Terminalbuilds
dotnet build hat eine neue Option, um eine modernere Buildausgabe zu erzeugen. Diese Terminal Logger-Ausgabe gruppiert Fehler mit dem Projekt, von dem sie stammen, unterscheidet die verschiedenen Zielframeworks für multi-gezielte Projekte besser und bietet Echtzeitinformationen zu dem, was der Build tut. Wenn Sie sich für die neue Ausgabe anmelden möchten, verwenden Sie die --tl Option. Weitere Informationen zu dieser Option finden Sie unter dotnet build options.
Vereinfachte Ausgabepfade
.NET 8 bietet eine Option zur Vereinfachung des Ausgabepfads und der Ordnerstruktur für Buildausgaben. Zuvor haben .NET-Apps einen tiefen und komplexen Satz von Ausgabepfaden für verschiedene Buildartefakte erstellt. Die neue, vereinfachte Ausgabepfadstruktur sammelt alle Build-Ausgaben an einem zentralen Ort, was es den Tools erleichtert, den Prozess vorherzusehen.
Weitere Informationen finden Sie im Ausgabelayout für Artefakte.
dotnet workload clean-Befehl
.NET 8 führt einen neuen Befehl ein, um Workload Packs zu bereinigen, die möglicherweise über mehrere .NET SDK- oder Visual Studio-Updates übrig bleiben. Wenn beim Verwalten von Arbeitslasten Probleme auftreten, sollten Sie in Betracht ziehen, workload clean zu verwenden, um sicher einen bekannten Zustand wiederherzustellen, bevor Sie es erneut ausführen. Der Befehl verfügt über zwei Modi:
dotnet workload cleanFührt die Garbage Collection von Workload für dateibasierte oder MSI-basierte Workloads aus, die verwaiste Pakete bereinigen. Verwaiste Pakete stammen aus deinstallierten Versionen des .NET SDK oder von Paketen, in denen Installationsdatensätze für das Paket nicht mehr vorhanden sind.
Wenn Visual Studio installiert ist, listet der Befehl auch alle Workloads auf, die Sie manuell mithilfe von Visual Studio bereinigen sollten.
dotnet workload clean --allDieser Modus ist aggressiver und bereinigt jedes Paket auf dem Computer, das vom aktuellen SDK-Workload-Installationstyp ist (und das nicht aus Visual Studio stammt). Außerdem werden alle Workload-Installationsdatensätze für die ausgeführte .NET SDK-Feature-Version und ältere entfernt.
dotnet publish und dotnet pack Vermögenswerte
Da die dotnet publish und dotnet pack Befehle für die Erstellung von Produktionsressourcen vorgesehen sind, erzeugen sie nun standardmäßig Release Ressourcen.
Die folgende Ausgabe zeigt das unterschiedliche Verhalten zwischen dotnet build und dotnet publish, und wie Sie zum Veröffentlichen Debug von Ressourcen zurückkehren können, indem Sie die PublishRelease Eigenschaft auf falsefestlegen.
/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/
Weitere Informationen finden Sie unter "dotnet pack" verwendet release config und "dotnet publish" verwendet release config.
dotnet restore Sicherheitsüberwachung
Ab .NET 8 können Sie sich bei der Wiederherstellung von Abhängigkeitspaketen für Sicherheitsüberprüfungen auf bekannte Sicherheitsrisiken anmelden. Diese Überwachung erstellt einen Bericht zu Sicherheitsrisiken mit dem Namen des betroffenen Pakets, dem Schweregrad des Sicherheitsrisikos und einem Link zu Empfehlungen und weiteren Details. Wenn Sie dotnet add oder dotnet restore ausführen, werden Warnungen NU1901-NU1904 für gefundene Sicherheitsrisiken angezeigt. Weitere Informationen finden Sie unter "Überwachen von Sicherheitsrisiken".
Vorlagenmodul
Das Vorlagenmodul bietet eine sicherere Benutzererfahrung in .NET 8, indem einige sicherheitsbezogene Features von NuGet integriert werden. Zu den Verbesserungen gehören:
Standardmäßig verhindern, dass Pakete von
http://-Feeds heruntergeladen werden. Der folgende Befehl kann beispielsweise das Vorlagenpaket nicht installieren, da die Quell-URL keine HTTPS verwendet.dotnet new install console --add-source "http://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json"Sie können diese Einschränkung überschreiben, indem Sie die
--forceKennzeichnung verwenden.Für
dotnet new,dotnet new installunddotnet new updateüberprüfen Sie bekannte Sicherheitsrisiken im Vorlagenpaket. Wenn Sicherheitsrisiken gefunden werden und Sie fortfahren möchten, müssen Sie das--forceFlag verwenden.Geben Sie Informationen über den Eigentümer des Vorlagenpakets für
dotnet newan. Der Besitz wird vom NuGet-Portal überprüft und kann als vertrauenswürdiges Merkmal angesehen werden.Geben Sie für
dotnet searchunddotnet uninstall, ob eine Vorlage aus einem Paket installiert wird, das "vertrauenswürdig" ist, d. h. es verwendet ein reserviertes Präfix.
Quelllink
Der Quelllink ist jetzt im .NET SDK enthalten. Ziel ist, dass durch das Bündeln von Source Link in das SDK, anstelle eines separaten Pakets für die Informationen, standardmäßig mehr Pakete diese Informationen enthalten werden. Diese Informationen verbessern die IDE-Erfahrung für Entwickler.
Hinweis
Als Nebeneffekt dieser Änderung werden Commit-Informationen in dem InformationalVersion Wert der erstellten Bibliotheken und Anwendungen eingeschlossen, selbst die, die auf .NET 7 oder eine frühere Version abzielen. Weitere Informationen finden Sie unter "Source Link", der im .NET SDK enthalten ist.
Source-build SDK
Das Linux Distribution-Built (Source-Build) SDK bietet jetzt die Möglichkeit, eigenständige Anwendungen mit den Source-Build-Laufzeitpaketen zu erstellen. Das verteilungsspezifische Laufzeitpaket wird mit dem Source-Build SDK gebündelt. Während der eigenständigen Bereitstellung wird auf dieses gebündelte Laufzeitpaket verwiesen, wodurch das Feature für Benutzer aktiviert wird.
Vorlage für systemeigene AOT-Konsolen-App
Die standardmäßige Konsolenanwendungsvorlage enthält jetzt von Haus aus Unterstützung für AOT. Um ein Projekt zu erstellen, das für die AOT-Kompilierung konfiguriert ist, führen Sie einfach aus dotnet new console --aot. Die hinzugefügte --aot Projektkonfiguration hat drei Effekte:
- Generiert eine native eigenständige ausführbare Datei mit Native AOT, wenn Sie das Projekt z. B. mit
dotnet publishoder Visual Studio veröffentlichen. - Ermöglicht Kompatibilitätsanalysen für Trimmen, AOT und Einzeldateien. Diese Analysatoren benachrichtigen Sie über potenziell problematische Teile Ihres Projekts (sofern vorhanden).
- Aktiviert die Debugzeitemulation von AOT, sodass Sie beim Debuggen ihres Projekts ohne AOT-Kompilierung eine ähnliche Erfahrung wie AOT erhalten. Wenn Sie z. B. in einem NuGet-Paket verwenden System.Reflection.Emit , das für AOT nicht kommentiert wurde (und daher von der Kompatibilitätsanalyse verpasst wurde), bedeutet die Emulation, dass Sie keine Überraschungen haben, wenn Sie versuchen, das Projekt mit AOT zu veröffentlichen.
.NET unter Linux
Mindestunterstützungsgrundlagen für Linux
Die Mindestunterstützungsbaselines für Linux wurden für .NET 8 aktualisiert. .NET wurde für Ubuntu 16.04 für alle Architekturen entwickelt. Das ist in erster Linie wichtig für die Definition der Mindestversion glibc für .NET 8. .NET 8 kann nicht mit Distro-Versionen beginnen, die einen älteren Glibc enthalten, z. B. Ubuntu 14.04 oder Red Hat Enterprise Linux 7.
Weitere Informationen finden Sie unter Red Hat Enterprise Linux Family-Support.
Erstellen Sie Ihr eigenes .NET unter Linux
In früheren .NET-Versionen konnten Sie .NET aus dem Quellcode erstellen, aber es war erforderlich, dass Sie einen "Quell-Tarball" aus dem dotnet/installer-Repository-Commit erstellen, das einem Release entspricht. In .NET 8 ist das nicht mehr erforderlich, und Sie können .NET unter Linux direkt aus dem dotnet/dotnet-Repository erstellen. Dieses Repository verwendet dotnet/source-build zum Erstellen von .NET-Runtimes, -Tools und -SDKs. Dies ist der gleiche Build, den Red Hat und Canonical zum Erstellen von .NET verwenden.
Das Erstellen in einem Container ist der einfachste Ansatz für die meisten Personen, da die dotnet-buildtools/prereqs Containerimages alle erforderlichen Abhängigkeiten enthalten. Weitere Informationen finden Sie in den Buildanweisungen.
NuGet-Signaturüberprüfung
Ab .NET 8 überprüft NuGet standardmäßig signierte Pakete unter Linux. NuGet überprüft weiterhin signierte Pakete unter Windows.
Die meisten Benutzer sollten die Überprüfung nicht bemerken. Wenn Sie jedoch über ein vorhandenes Stammzertifikatbundle verfügen, das sich unter "/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem" befindet, werden möglicherweise Vertrauensfehler angezeigt, die mit der Warnung NU3042 einhergehen.
Sie können die Überprüfung deaktivieren, indem Sie die Umgebungsvariable DOTNET_NUGET_SIGNATURE_VERIFICATION auf falsefestlegen.
Codeanalyse
.NET 8 enthält mehrere neue Codeanalysatoren und Fixer, um sicherzustellen, dass Sie .NET-Bibliotheks-APIs ordnungsgemäß und effizient verwenden. In der folgenden Tabelle sind die neuen Analysegeräte zusammengefasst.
| Regel-ID | Kategorie | Description |
|---|---|---|
| CA1856 | Leistung | Wird ausgelöst, wenn das ConstantExpectedAttribute Attribut nicht ordnungsgemäß auf einen Parameter angewendet wird. |
| CA1857 | Leistung | Wird ausgelöst, wenn ein Parameter mit ConstantExpectedAttribute annotiert ist, aber das angegebene Argument keine Konstante ist. |
| CA1858 | Leistung | Um festzustellen, ob eine Zeichenfolge mit einem bestimmten Präfix beginnt, ist es besser, String.StartsWith aufzurufen, als String.IndexOf aufzurufen und dann das Ergebnis mit Null zu vergleichen. |
| CA1859 | Leistung | Diese Regel empfiehlt, den Typ bestimmter lokaler Variablen, Felder, Eigenschaften, Methodenparameter und Methodenrückgabetypen von Schnittstellen- oder abstrakten Typen nach Möglichkeit auf konkrete Typen zu aktualisieren. Die Verwendung konkreter Typen führt zu höherwertigem generierten Code. |
| CA1860 | Leistung | Um zu ermitteln, ob ein Sammlungstyp Elemente enthält, ist es besser, Length, Count oder IsEmpty zu verwenden, als Enumerable.Any aufzurufen. |
| CA1861 | Leistung | Konstantenarrays, die als Argumente übergeben werden, werden nicht wiederverwendet, wenn sie wiederholt aufgerufen werden, was impliziert, dass jedes Mal ein neues Array erstellt wird. Um die Leistung zu verbessern, ziehen Sie in Betracht, das Array in ein statisches Readonly-Feld zu extrahieren. |
| CA1865-CA1867 | Leistung | Die char-Überladung ist eine effizientere Überladung für einen String mit einem einzelnen Zeichen. |
| CA2021 | Zuverlässigkeit | Enumerable.Cast<TResult>(IEnumerable) und Enumerable.OfType<TResult>(IEnumerable) benötigen kompatible Typen, um ordnungsgemäß zu funktionieren. Verbreiterung und benutzerdefinierte Konvertierungen werden mit generischen Typen nicht unterstützt. |
| CA1510-CA1513 | Wartbarkeit | Throw-Helfer sind einfacher und effizienter als ein if-Block, der eine neue Ausnahmeinstanz konstruiert. Diese vier Analysegeräte wurden für die folgenden Ausnahmen erstellt: ArgumentNullException, , ArgumentExceptionArgumentOutOfRangeExceptionund ObjectDisposedException. |
Diagnostics
C# Hot Reload unterstützt das Ändern von Generischen
Ab .NET 8 unterstützt C# Hot Reload das Ändern generischer Typen und generischer Methoden. Wenn Sie Konsolen-, Desktop-, Mobile- oder WebAssembly-Anwendungen mit Visual Studio debuggen, können Sie Änderungen auf generische Klassen und generische Methoden in C#-Code oder Razor-Seiten anwenden. Weitere Informationen finden Sie in der vollständigen Liste der von Roslyn unterstützten Bearbeitungen.