Sdílet prostřednictvím


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

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 publisha 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 restoreupozorně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 newpřípadě , dotnet new installa dotnet 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 newinformace 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čujedotnet search, zda je šablona nainstalována z balíčku, který je "důvěryhodný", tj. používá vyhrazenou předponu.dotnet uninstall

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í AndroidStripILAfterAOTtrue 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 falsehodnotu .

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, Countnebo 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.

Viz také