Novinky v sadě SDK a nástrojích pro .NET 8
Tento článek popisuje nové funkce v sadě .NET SDK a nástrojích pro .NET 8.
Sada SDK
Tato část obsahuje následující dílčí témata:
- Vyhodnocení projektu založeného na rozhraní příkazového řádku
- Výstup sestavení terminálu
- Zjednodušené výstupní cesty
- Příkaz dotnet workload clean
- Prostředky dotnet publish a dotnet pack
- Modul šablon
- Odkaz na zdroj
- Sada SDK zdrojového sestavení
Vyhodnocení projektu založeného na rozhraní příkazového řádku
Nástroj MSBuild obsahuje novou funkci, která usnadňuje začlenění dat z nástroje MSBuild do skriptů nebo nástrojů. Následující nové příznaky jsou k dispozici pro příkazy rozhraní příkazového řádku, jako je publikování dotnet k získání dat pro použití v kanálech CI a jinde.
Příznak | Popis |
---|---|
--getProperty:<PROPERTYNAME> |
Načte vlastnost MSBuild se zadaným názvem. |
--getItem:<ITEMTYPE> |
Načte položky NÁSTROJE MSBuild zadaného typu. |
--getTargetResults:<TARGETNAME> |
Načte výstupy ze spuštění zadaného cíle. |
Hodnoty se zapisují do standardního výstupu. Více nebo komplexních hodnot je výstup ve formátu JSON, jak je znázorněno v následujících příkladech.
>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",
...
]
}
}
Výstup sestavení terminálu
dotnet build
má novou možnost vytvořit modernější výstup sestavení. Tento terminál protokolovací nástroj pro výstupy seskupuje chyby s projektem, ze kterých pocházejí, lépe rozlišuje různé cílové architektury pro projekty s více cíli a poskytuje informace o tom, co sestavení dělá v reálném čase. Pokud se chcete přihlásit k novému výstupu, použijte tuto --tl
možnost. Další informace o této možnosti najdete v tématu dotnet build options.
Zjednodušené výstupní cesty
.NET 8 zavádí možnost zjednodušení výstupní cesty a struktury složek pro výstupy sestavení. Dříve aplikace .NET vytvořily hlubokou a složitou sadu výstupních cest pro různé artefakty sestavení. Nová zjednodušená struktura výstupní cesty shromažďuje všechny výstupy sestavení do společného umístění, což usnadňuje předvídání nástrojů.
Další informace najdete v tématu Rozložení výstupu Artefakty.
Příkaz dotnet workload clean
.NET 8 zavádí nový příkaz pro vyčištění balíčků úloh, které můžou zůstat po několika aktualizacích sady .NET SDK nebo sady Visual Studio. Pokud při správě úloh narazíte na problémy, zvažte použití workload clean
k bezpečnému obnovení do známého stavu, než to zkusíte znovu. Příkaz má dva režimy:
dotnet workload clean
Spouští uvolňování paměti úloh pro úlohy založené na souborech nebo MSI, které vyčistí osamocené balíčky. Osamocené balíčky pocházejí z odinstalovaných verzí sady .NET SDK nebo balíčků, ve kterých již neexistují instalační záznamy pro balíček.
Pokud je sada Visual Studio nainstalovaná, zobrazí příkaz také všechny úlohy, které byste měli vyčistit ručně pomocí sady Visual Studio.
dotnet workload clean --all
Tento režim je agresivnější a vyčistí všechny balíčky na počítači, který je aktuálním typem instalace sady SDK (a to není ze sady Visual Studio). Odebere také všechny záznamy o instalaci úloh pro spuštěný pás funkcí sady .NET SDK a níže.
dotnet publish
a dotnet pack
prostředky
Vzhledem k tomu, že příkazy dotnet publish
a dotnet pack
příkazy jsou určené k výrobě produkčních prostředků, teď ve výchozím nastavení vytvářejí Release
prostředky.
Následující výstup ukazuje různé chování mezi dotnet build
a dotnet publish
a jak se můžete vrátit k publikování Debug
prostředků nastavením PublishRelease
vlastnosti na 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/
Další informace najdete v tématu dotnet pack používá konfiguraci vydané verze a publikování dotnet používá konfiguraci vydané verze.
dotnet restore
auditování zabezpečení
Od verze .NET 8 se můžete přihlásit k kontrolám zabezpečení známých ohrožení zabezpečení při obnovení balíčků závislostí. Toto auditování vytvoří sestavu ohrožení zabezpečení s názvem ovlivněného balíčku, závažností chyby zabezpečení a odkazem na poradce pro další podrobnosti. Při spuštění dotnet add
nebo dotnet restore
upozornění NU1901-NU1904 se zobrazí pro všechna nalezená ohrožení zabezpečení. Další informace najdete v tématu Audit ohrožení zabezpečení.
Modul šablon
Modul šablon poskytuje bezpečnější prostředí v .NET 8 integrací některých funkcí souvisejících se zabezpečením NuGetu. Mezi tato vylepšení patří:
Ve výchozím nastavení zabráníte stahování balíčků z
http://
informačních kanálů. Například následující příkaz nenainstaluje balíček šablony, protože zdrojová adresa URL nepoužívá protokol HTTPS.dotnet new install console --add-source "http://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.json"
Toto omezení můžete přepsat pomocí příznaku
--force
.V
dotnet new
případě ,dotnet new install
adotnet new update
, zkontrolujte známé chyby zabezpečení v balíčku šablony. Pokud se najde ohrožení zabezpečení a chcete pokračovat, musíte použít--force
příznak.Zadejte
dotnet new
informace o vlastníkovi balíčku šablony. Vlastnictví je ověřeno portálem NuGet a může se považovat za důvěryhodnou charakteristiku.Označuje
dotnet search
, zda je šablona nainstalována z balíčku, který je "důvěryhodný", tj. používá vyhrazenou předponu.dotnet uninstall
Odkaz na zdroj
Zdrojový odkaz je teď součástí sady .NET SDK. Cílem je, že sloučením odkazu na zdroj do sady SDK místo nutnosti samostatného <PackageReference>
balíčku budou tyto informace ve výchozím nastavení obsahovat další balíčky. Tato informace zlepší prostředí IDE pro vývojáře.
Poznámka:
Jako vedlejší účinek této změny jsou informace o potvrzení zahrnuty do InformationalVersion
hodnoty sestavených knihoven a aplikací, a to i těch, které cílí na .NET 7 nebo starší verzi. Další informace najdete v tématu Odkaz na zdroj, který je součástí sady .NET SDK.
Sada SDK zdrojového sestavení
Sada SDK sestavená v linuxové distribuci (zdrojové sestavení) má teď možnost vytvářet samostatné aplikace pomocí balíčků modulu runtime zdrojového sestavení. Balíček modulu runtime specifický pro distribuci je součástí sady SDK zdrojového sestavení. Během samostatného nasazení se na tento balíček modulu runtime v balíčku odkazuje, čímž se povolí funkce pro uživatele.
Nativní podpora AOT
Možnost publikování jako nativní AOT byla poprvé zavedena v .NET 7. Publikování aplikace s nativní AOT vytvoří plně samostatnou verzi vaší aplikace, která nepotřebuje modul runtime – všechno je součástí jednoho souboru. .NET 8 přináší následující vylepšení nativního publikování AOT:
Přidává podporu pro architektury x64 a Arm64 v macOS.
Snižuje velikost nativních aplikací AOT v Linuxu o až 50 %. Následující tabulka ukazuje velikost aplikace Hello World publikovanou s nativní AOT, která zahrnuje celý modul runtime .NET v .NET 7 a .NET 8:
Operační systém .NET 7 .NET 8 Linux x64 (s -p:StripSymbols=true
)3,76 MB 1,84 MB Windows x64 2,85 MB 1,77 MB Umožňuje určit předvolbu optimalizace: velikost nebo rychlost. Ve výchozím nastavení se kompilátor rozhodne vygenerovat rychlý kód a přitom si uvědomovat velikost aplikace. Vlastnost MSBuild však můžete použít
<OptimizationPreference>
k optimalizaci speciálně pro jednu nebo druhou. Další informace najdete v tématu Optimalizace nasazení AOT.
Šablona konzolové aplikace
Výchozí šablona konzolové aplikace teď obsahuje podporu AOT. Pokud chcete vytvořit projekt nakonfigurovaný pro kompilaci AOT, stačí spustit dotnet new console --aot
. Konfigurace projektu přidaná uživatelem --aot
má tři účinky:
- Generuje nativní samostatný spustitelný soubor s nativní AOT při publikování projektu, například se sadou
dotnet publish
Visual Studio. - Umožňuje analyzátory kompatibility pro oříznutí, AOT a jeden soubor. Tyto analyzátory vás upozorní na potenciálně problematické části projektu (pokud existují).
- Umožňuje emulaci AOT v čase ladění, takže při ladění projektu bez kompilace AOT získáte podobné prostředí jako AOT. Pokud například použijete System.Reflection.Emit balíček NuGet, který nebyl pro AOT označený jako AOT (a proto ho analyzátor kompatibility vynechal), emulace znamená, že při pokusu o publikování projektu pomocí AOT nebudete mít žádné překvapení.
Cílení platforem podobných iOSu s nativní AOT
.NET 8 spustí práci na povolení nativní podpory AOT pro platformy podobné iOSu. Teď můžete sestavovat a spouštět aplikace .NET iOS a .NET MAUI s nativní AOT na následujících platformách:
ios
iossimulator
maccatalyst
tvos
tvossimulator
Předběžné testování ukazuje, že velikost aplikace na disku se snižuje o přibližně 35 % pro aplikace .NET pro iOS, které místo Mono používají nativní AOT. Velikost aplikace na disku pro aplikace .NET MAUI pro iOS se snižuje až o 50 %. Kromě toho je čas spuštění rychlejší. Aplikace pro .NET pro iOS mají přibližně 28 % rychlejší čas spuštění, zatímco aplikace .NET MAUI pro iOS mají v porovnání s Mono přibližně 50 % lepší výkon při spuštění. Podpora .NET 8 je experimentální a pouze první krok pro funkci jako celek. Další informace najdete v blogovém příspěvku .NET MAUI o vylepšení výkonu .NET 8.
Nativní podpora AOT je dostupná jako funkce výslovného souhlasu určená pro nasazení aplikace; Mono je stále výchozím modulem runtime pro vývoj a nasazení aplikací. Pokud chcete vytvořit a spustit aplikaci .NET MAUI s nativní AOT na zařízení s iOSem, použijte dotnet workload install maui
k instalaci úlohy .NET MAUI a dotnet new maui -n HelloMaui
vytvoření aplikace. Potom nastavte vlastnost PublishAot
MSBuild v true
souboru projektu.
<PropertyGroup>
<PublishAot>true</PublishAot>
</PropertyGroup>
Když nastavíte požadovanou vlastnost a spustíte dotnet publish
ji, jak je znázorněno v následujícím příkladu, aplikace se nasadí pomocí nativní AOT.
dotnet publish -f net8.0-ios -c Release -r ios-arm64 /t:Run
Omezení
Ne všechny funkce iOSu jsou kompatibilní s nativní AOT. Podobně ne všechny knihovny běžně používané v iOSu jsou kompatibilní s NativeAOT. Kromě stávajících omezení nativního nasazení AOT ukazuje následující seznam některá další omezení při cílení na platformy podobné iOSu:
- Použití nativní AOT je povolené jenom během nasazování aplikací (
dotnet publish
). - Ladění spravovaného kódu je podporováno pouze u mono.
- Kompatibilita s architekturou .NET MAUI je omezená.
Kompilace AOT pro aplikace pro Android
Pokud chcete zmenšit velikost aplikace, aplikace .NET a .NET MAUI, které cílí na Android, používají profilovaný režim kompilace (AOT), když jsou integrované v režimu vydání. Profilovaná kompilace AOT ovlivňuje méně metod než běžná kompilace AOT. .NET 8 představuje <AndroidStripILAfterAOT>
vlastnost, která umožňuje vyjádřit výslovný souhlas s další kompilací AOT pro aplikace pro Android, aby se zmenšila velikost aplikace ještě více.
<PropertyGroup>
<AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
</PropertyGroup>
Ve výchozím nastavení nastavení AndroidStripILAfterAOT
true
přepíše výchozí AndroidEnableProfiledAot
nastavení, což umožňuje (téměř) všechny metody, které byly kompilovány AOT, aby byly oříznuty. Profilované funkce AOT a IL prokládání můžete použít také tak, že explicitně nastavíte obě vlastnosti na true
:
<PropertyGroup>
<AndroidStripILAfterAOT>true</AndroidStripILAfterAOT>
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>
Vícedefinované aplikace pro Windows
Když vytváříte aplikace, které cílí na windows na jiných platformách než Windows, výsledný spustitelný soubor se teď aktualizuje o všechny zadané prostředky Win32 – například ikona aplikace, manifest, informace o verzi.
Dříve se aplikace musely stavět na Windows, aby tyto prostředky měly. Oprava této mezery v podpoře křížové budovy byla oblíbenou žádostí, protože to byl významný problém ovlivňující složitost infrastruktury i využití prostředků.
.NET v Linuxu
Minimální směrné plány podpory pro Linux
Minimální směrné plány podpory pro Linux byly aktualizovány pro .NET 8. .NET je sestavený tak, aby cílil na Ubuntu 16.04 pro všechny architektury. To je důležité hlavně pro definování minimální glibc
verze pro .NET 8. .NET 8 se nepovede spustit u verzí distribuce, které obsahují starší glibc, jako je Ubuntu 14.04 nebo Red Hat Enterprise Linux 7.
Další informace najdete v tématu Podpora rodiny Red Hat Enterprise Linux.
Vytvoření vlastní technologie .NET v Linuxu
V předchozích verzích .NET jste mohli sestavit .NET ze zdroje, ale vyžadovalo to, abyste vytvořili "zdrojový tarball" z potvrzení úložiště dotnet/installer , které odpovídalo vydané verzi. V .NET 8 už to není potřeba a můžete ho sestavit v Linuxu přímo z úložiště dotnet/dotnet . Toto úložiště používá k sestavení modulů runtime ,NET, nástrojů a sad SDK dotnet/source-build . Jedná se o stejný build, který Red Hat a Canonical používají k sestavení .NET.
Vytváření v kontejneru je nejjednodušším přístupem pro většinu lidí, protože dotnet-buildtools/prereqs
image kontejnerů obsahují všechny požadované závislosti. Další informace najdete v pokynech k sestavení.
Ověření podpisu NuGet
Počínaje .NET 8 nuGet ve výchozím nastavení ověřuje podepsané balíčky v Linuxu. NuGet i nadále ověřuje podepsané balíčky ve Windows.
Většinauživatelůch Pokud však máte existující kořenovou sadu certifikátů umístěnou v umístění /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem, může se zobrazit selhání důvěryhodnosti, která doprovází upozornění NU3042.
Můžete se odhlásit od ověření nastavením proměnné DOTNET_NUGET_SIGNATURE_VERIFICATION
prostředí na false
hodnotu .
Analýza kódu
.NET 8 obsahuje několik nových analyzátorů kódu a oprav, které vám pomůžou ověřit, že rozhraní API knihovny .NET používáte správně a efektivně. Následující tabulka shrnuje nové analyzátory.
ID pravidla | Kategorie | Popis |
---|---|---|
CA1856 | Výkon | Aktivuje se, ConstantExpectedAttribute pokud atribut není správně použit u parametru. |
CA1857 | Výkon | Aktivuje se, když je parametr opatřen poznámkami, ConstantExpectedAttribute ale zadaný argument není konstanta. |
CA1858 | Výkon | Pokud chcete zjistit, jestli řetězec začíná danou předponou, je lepší volat String.StartsWith , než volat String.IndexOf , a pak porovnat výsledek s nulou. |
CA1859 | Výkon | Toto pravidlo doporučuje upgradovat typ konkrétních místních proměnných, polí, vlastností, parametrů metody a návratových typů z rozhraní nebo abstraktních typů na konkrétní typy, pokud je to možné. Použití konkrétních typů vede k vyšší kvalitě generovaného kódu. |
CA1860 | Výkon | Chcete-li zjistit, zda typ kolekce má nějaké prvky, je lepší použít Length , Count nebo IsEmpty než volat Enumerable.Any. |
CA1861 | Výkon | Konstantní matice předané jako argumenty se při opakovaném zavolání znovu nepoužívají, což znamená, že se pokaždé vytvoří nové pole. Pokud chcete zvýšit výkon, zvažte extrakci pole do statického pole jen pro čtení. |
CA1865-CA1867 | Výkon | Přetížení znaku je výkonnější přetížení řetězce s jedním znakem. |
CA2021 | Spolehlivost | Enumerable.Cast<TResult>(IEnumerable) a Enumerable.OfType<TResult>(IEnumerable) vyžadovat, aby kompatibilní typy fungovaly správně. Rozšíření a uživatelem definované převody nejsou podporovány u obecných typů. |
CA1510-CA1513 | Udržovatelnost | Pomocné rutiny throw jsou jednodušší a efektivnější než if blok, který vytváří novou instanci výjimky. Tyto čtyři analyzátory byly vytvořeny pro následující výjimky: ArgumentNullException, ArgumentExceptionArgumentOutOfRangeException a ObjectDisposedException. |
Diagnostika
Opětovné načítání za provozu jazyka C# podporuje úpravy obecných typů
Počínaje verzí .NET 8 Opětovné načítání za provozu jazyka C# podporuje úpravy obecných typů a obecných metod. Při ladění konzoly, plochy, mobilních aplikací nebo aplikací WebAssembly pomocí sady Visual Studio můžete změny použít u obecných tříd a obecných metod v kódu jazyka C# nebo na stránkách Razor Pages. Další informace najdete v úplném seznamu úprav podporovaných aplikací Roslyn.