Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se vztahuje na: ✔️ .NET SDK 10 a novější verze
Zabalte nástroje .NET pro konkrétní platformy a architektury, abyste mohli distribuovat nativní, rychlé a oříznuté aplikace. Tato funkce usnadňuje distribuci optimalizovaných aplikací pro nástroje příkazového řádku, jako jsou servery MCP nebo jiné nástroje specifické pro platformu.
Přehled
Počínaje sadou .NET SDK 10 můžete vytvořit nástroje .NET, které cílí na konkrétní prostředí operačního systému (reprezentované identifikátory RID)). Tyto nástroje můžou být:
- Specifické pro identifikátor RID: Kompilováno pro konkrétní operační systémy a architektury.
- Samostatné: Zahrňte modul runtime .NET a nevyžadují samostatnou instalaci .NET.
- Nativní AOT: Pro rychlejší spouštění a menší nároky na paměť použijte předem připravenou kompilaci.
Uživatelé si při instalaci nástroje nevšimnou rozdílu. Rozhraní .NET CLI automaticky vybere a nainstaluje nejlepší balíček pro svou platformu.
Přihlaste se k balení specifickému pro RID
Pokud chcete vytvořit nástroj specifický pro identifikátor RID, nakonfigurujte projekt pomocí jedné z následujících vlastností nástroje MSBuild:
RuntimeIdentifiers – vlastnost
Slouží RuntimeIdentifiers k určení platforem, které nástroj podporuje:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<PackAsTool>true</PackAsTool>
<ToolCommandName>mytool</ToolCommandName>
<RuntimeIdentifiers>win-x64;linux-x64;osx-arm64</RuntimeIdentifiers>
</PropertyGroup>
</Project>
vlastnost ToolPackageRuntimeIdentifiers
Alternativně můžete použít ToolPackageRuntimeIdentifiers pro konfiguraci identifikátorů RID pro konkrétní nástroje:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<PackAsTool>true</PackAsTool>
<PublishAot>true</PublishAot>
<ToolCommandName>mytool</ToolCommandName>
<ToolPackageRuntimeIdentifiers>win-x64;linux-x64;osx-arm64</ToolPackageRuntimeIdentifiers>
</PropertyGroup>
</Project>
Použijte seznam hodnot IDENTIFIKÁTORŮ RID oddělený středníkem. Seznam identifikátorů modulu runtime najdete v katalogu IDENTIFIKÁTORŮ RID.
Poskytnutí verze závislé na rozhraní
Když zvolíte balení nástrojů specifických pro RID, .NET SDK vytvoří soběstačné balíčky pro každý zadaný RID. Ztratíte však výchozí balíček závislý na rozhraní, který funguje na libovolné platformě s nainstalovaným modulem runtime .NET.
Pokud chcete poskytnout verzi závislou na frameworku společně s balíčky specifickými pro prostředí RID, přidejte any do seznamu ToolPackageRuntimeIdentifiers:
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<ToolPackageRuntimeIdentifiers>win-x64;osx-arm64;linux-x64;any</ToolPackageRuntimeIdentifiers>
</PropertyGroup>
Tato konfigurace vytvoří pět balíčků:
- Jeden balíček ukazatele nejvyšší úrovně, který obsahuje seznam všech dostupných dílčích balíčků.
- Tři balíčky specifické pro RID (
win-x64,osx-arm64,linux-x64), které jsou samostatně obsažené a optimalizované. - Jeden balíček nezávislý na identifikátorech RID (
any), který je závislý na rozhraní a vyžaduje instalaci modulu runtime .NET.
Když uživatelé nainstalují nástroj:
- Na systémech
win-x64,osx-arm64nebolinux-x64se stáhnou a spustí samostatné a oříznuté balíčky. - V jakémkoli jiném operačním systému nebo architektuře se použije balíček závislý na
anyarchitektuře.
Tento přístup poskytuje optimalizované samostatné binární soubory pro běžné platformy a současně zachovává kompatibilitu s méně běžnými platformami prostřednictvím záložního řešení závislého na rozhraní.
Kdy použít RuntimeIdentifiers vs. ToolPackageRuntimeIdentifiers
Oba RuntimeIdentifiers a ToolPackageRuntimeIdentifiers zařadí váš nástroj do balení podle RID, ale slouží mírně odlišným účelům:
Použít RuntimeIdentifiers když:
- Chcete, aby projekt sestavil a publikoval aplikace obecně specifické pro identifikátory RID (nejen jako nástroj).
- Primárně cílíte na CoreCLR (jiné než AOT) nebo chcete standardní chování sady SDK, kdy jeden
dotnet packvytváří více balíčků specifických pro identifikátory RID. - Můžete určit podmínky pro
PublishAotu podmnožiny identifikátorů RID, ale přesto chcete balíček založený na CoreCLR pro každý identifikátor RID v rámciRuntimeIdentifiers.
Použít ToolPackageRuntimeIdentifiers když:
- Chcete definovat chování specifické pro identifikátory RID pouze pro balení nástrojů, aniž byste změnili způsob sestavení projektu pro jiné scénáře nasazení.
- Používáte nativní AOT a plánujete ručně sestavit binární soubory AOT pro každý RID pomocí
dotnet pack -r <RID>. - Chcete hybridní model , kde některé identifikátory RID získávají nativní AOT a jiné se vrátí k přenosné implementaci CoreCLR.
Notes:
- Balíček ukazatele nejvyšší úrovně určuje dostupné balíčky specifické pro identifikátory RID. Pokud zadáte
ToolPackageRuntimeIdentifiers, určí to identifikátory RID nástroje; jinak se použijeRuntimeIdentifiers. -
ToolPackageRuntimeIdentifiersby měla být rovna nebo podmnožině identifikátorů RID vRuntimeIdentifiers - Pokud
PublishAot=truese balíčky specifické pro identifikátory RID generují pouze v případě,dotnet pack -r linux-x64že zabalíte konkrétní identifikátor RID (například). - Nativní sestavení AOT (
PublishAot=true) se podporují jenom v případech, kdy se operační systém sestavení a cílový operační systém shodují.
Zabalte svůj nástroj
Proces balení se liší v závislosti na tom, jestli používáte kompilaci AOT. Pokud chcete vytvořit balíček NuGet nebo soubor .nupkg z projektu, spusťte příkaz dotnet pack .
Nástroje určené specificky pro RID a nezávislé nástroje
Spusťte dotnet pack jednou:
dotnet pack
Tento příkaz vytvoří několik balíčků NuGet:
- Jeden balíček pro každý identifikátor RID:
<packageName>.<RID>.<packageVersion>.nupkg- Příklad:
mytool.win-x64.1.0.0.nupkg - Příklad:
mytool.linux-x64.1.0.0.nupkg - Příklad:
mytool.osx-arm64.1.0.0.nupkg
- Příklad:
- Jeden balíček ukazatele nezávislý na identifikátoru RID:
<packageName>.<packageVersion>.nupkg- Příklad:
mytool.1.0.0.nupkg
- Příklad:
Nástroje AOT
Pro nástroje s kompilací AOT (<PublishAot>true</PublishAot>) je nutné zabalit zvlášť pro každou platformu.
Požadavky na platformu pro nativní AOT
Nativní kompilace AOT vyžaduje, aby část operačního systému (OS) identifikátoru RID sady SDK odpovídala operačnímu systému cílového identifikátoru RID. Sada SDK může křížově kompilovat různé architektury (například x64 až ARM64), ale ne napříč operačními systémy (například Windows do Linuxu).
To znamená, že máte několik možností pro vytváření nativních balíčků AOT:
- Sestavení pouze pro váš vývojový počítač: Podpora nativní AOT pouze pro operační systém, na kterém vyvíjíte.
-
Používejte kontejnery pro linuxové buildy: Pokud používáte macOS nebo Windows, použijte kontejnery k křížovému kompilaci pro Linux. Například použijte
mcr.microsoft.com/dotnet/sdk:10.0-noble-aotkontejnerové image. - Federujte sestavení napříč počítači: K sestavování na různých operačních systémech používejte systémy CI/CD, jako jsou GitHub Actions nebo Azure DevOps Pipelines.
Nemusíte vytvářet všechny balíčky specifické pro identifikátory RID na stejném počítači nebo ve stejnou dobu. Před publikováním balíčku nejvyšší úrovně stačí je sestavit a publikovat.
Balení nativních nástrojů AOT
Balíček nejvyšší úrovně zabalte jednou (na libovolné platformě):
dotnet pack
Zabalte pro každé specifické RID na odpovídající platformě, například:
dotnet pack -r linux-x64
Každý příkaz balíčku specifického pro identifikátory RID musíte spustit na platformě, kde operační systém odpovídá operačnímu systému cílového identifikátoru RID. Další informace o požadavcích na nativní kompilaci AOT najdete v tématu Nativní nasazení AOT.
Když nastavíte PublishAot na true, chování při balení se změní:
-
dotnet packprodukuje balíček ukazatele nejvyšší úrovně (typDotnetTool). - Balíčky AOT specifické pro identifikátory RID se vytváří pouze v případě, že explicitně předáte například
-r <RID>,dotnet pack -r linux-x64nebodotnet pack -r osx-arm64.
Model balení Hybrid AOT + CoreCLR (příklad)
Některé nástroje chtějí nejlepší z obou světů:
- Nativní AOT pro podmnožinu platforem s vysokou prioritou (v závislosti na nástroji)
- Přenosná záložní sada CoreCLR, která funguje na platformách, které nejsou cílem nativních sestavení AOT.
Tento "hybridní" model můžete dosáhnout následujícím modelem:
Nakonfigurujte nástroj pro nativní identifikátory AOT a identifikátory RID specifické pro konkrétní nástroje.
V souboru projektu použijte
ToolPackageRuntimeIdentifiersa povoltePublishAot.Například:
<ToolPackageRuntimeIdentifiers>osx-arm64;linux-arm64;linux-x64;any</ToolPackageRuntimeIdentifiers> <PublishAot>true</PublishAot>Vytvořte balíček ukazatele.
Spuštěním
dotnet packjednou (na libovolné platformě) sestavte balíček nejvyšší úrovně, který odkazuje na balíčky specifické pro identifikátory RID:dotnet packSestavte nativní AOT balíčky pro vybrané RIDs.
Nativní kompilace AOT vyžaduje provádět sestavení na cílové platformě. Sestavte každý RID balíček s podporou AOT na odpovídající platformě pomocí
dotnet pack -r <RID>.
Například:
dotnet pack -r linux-x64
Sestavení záložního balíčku CoreCLR
Pokud chcete poskytnout univerzální zálohu, zabalte
anyidentifikátor RID bez AOT:dotnet pack -r any -p:PublishAot=falseTím se vytvoří přenosný balíček CoreCLR (například
yourtool.any.<version>.nupkg), který se dá spustit na platformách, které nemají vyhrazený build AOT.
Poznámka:
Obrazy kontejnerů .NET SDK 10.0-noble-aot můžete také použít k sestavení a zabalení nativních nástrojů AOT pro Linux z libovolného hostitele, který podporuje kontejnery Linuxu. Například:
mcr.microsoft.com/dotnet/sdk:10.0-noble-aot
To je užitečné, když váš vývojový počítač nativně neběží s Linuxem.
V tomto hybridním nastavení:
- Balíček ukazatele (
yourtool.<version>.nupkg) odkazuje na oba:- Nativní AOT balíčky specifické pro platformy RID (například
yourtool.osx-arm64,yourtool.linux-x64). - Balíček
anyCoreCLR jako záložní balíček.
- Nativní AOT balíčky specifické pro platformy RID (například
- .NET CLI automaticky vybere nejvhodnější balíček pro platformu uživatele při spuštění
dotnet tool installnebodnx.
Příklad: dotnet10-hybrid-tool
Úložiště dotnet10-hybrid-tool ukazuje tento hybridní vzor balení s nativními balíčky AOT pro osx-arm64, linux-arm64 a linux-x64, plus záložní balíček CoreCLR pro any RID (používá se například na Windows, pokud není k dispozici žádný build AOT).
Nástroj si můžete nainstalovat a vyzkoušet sami:
dotnet tool install -g dotnet10-hybrid-tool
dotnet10-hybrid-tool
Nástroj hlásí popis rozhraní runtime, identifikátor modulu runtime (RID) a režim kompilace (nativní AOT nebo CoreCLR).
Příklad výstupu na platformě s nativní AOT:
Hi, I'm a 'DotNetCliTool v2' tool!
Yes, I'm quite fancy.
Version: .NET 10.0.2
RID: osx-arm64
Mode: Native AOT
Příklad výstupu na platformě s využitím náhradní verze CoreCLR:
Hi, I'm a 'DotNetCliTool v2' tool!
Yes, I'm quite fancy.
Version: .NET 10.0.2
RID: win-x64
Mode: CoreCLR
Tím se stává užitečným způsobem pro experimentování s nástroji specifickými pro RID a zkompilovanými pomocí AOT a s chováním záložního mechanismu CoreCLR.
Publikování nástroje
Při publikování balíčků nástrojů specifických pro identifikátory RID používá rozhraní .NET CLI číslo verze balíčku nejvyšší úrovně k výběru odpovídajících balíčků specifických pro identifikátory RID. To znamená:
- Všechny balíčky specifické pro identifikátory RID musí mít stejnou verzi jako balíček nejvyšší úrovně.
- Všechny balíčky musí být publikovány ve vašem informačním kanálu, než se zpřístupní balíček nejvyšší úrovně.
Zajištění hladkého procesu publikování:
Nejprve publikujte všechny RID-specifické balíčky:
dotnet nuget push yourtool.win-x64.1.0.0.nupkg dotnet nuget push yourtool.linux-x64.1.0.0.nupkg dotnet nuget push yourtool.osx-arm64.1.0.0.nupkg dotnet nuget push yourtool.any.1.0.0.nupkgPublikujte balíček nejvyšší úrovně jako poslední:
dotnet nuget push yourtool.1.0.0.nupkg
Publikování balíčku nejvyšší úrovně naposledy zajišťuje, že všechny odkazované balíčky specifické pro identifikátory RID budou k dispozici, když uživatelé nainstalují váš nástroj. Pokud uživatel nainstaluje nástroj před publikováním všech balíčků RID, instalace se nezdaří.
Instalace a spouštění nástrojů
Zda nástroj používá balíčkování specifické pro identifikátory RID, je implementační detail, který je pro uživatele transparentní. Nástroje nainstalujete a spustíte stejným způsobem bez ohledu na to, jestli vývojář nástroje zvolil balení specifické pro identifikátory RID.
Globální instalace nástroje:
dotnet tool install -g mytool
Po instalaci ji můžete vyvolat přímo:
mytool
Můžete také použít dnx pomocníka, který se chová podobně jako npx v ekosystému Node.js: stáhne a spustí nástroj jediným gestem, pokud ještě není k dispozici:
dnx mytool
Když nástroj používá balení specifické pro identifikátory RID, rozhraní příkazového řádku .NET automaticky vybere správný balíček pro vaši platformu. Nemusíte zadávat identifikátor RID – rozhraní příkazového řádku ho odvodí z vašeho systému a stáhne příslušný balíček specifický pro identifikátor RID.
Viz také
- Kurz: Vytvoření nástroje .NET
- Přehled nástrojů .NET
- příkaz dotnet pack
- Katalog RID
- Nativní nasazení AOT