Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Dit artikel is van toepassing op: ✔️ .NET SDK 10 en latere versies
Pakket .NET-hulpprogramma's voor specifieke platformen en architecturen, zodat u systeemeigen, snelle en bijgesneden toepassingen kunt distribueren. Deze mogelijkheid maakt het eenvoudiger om geoptimaliseerde toepassingen te distribueren voor opdrachtregelprogramma's zoals MCP-servers of andere platformspecifieke hulpprogramma's.
Overzicht
Vanaf .NET SDK 10 kunt u .NET-hulpprogramma's maken die zijn gericht op specifieke besturingssysteemomgevingen (vertegenwoordigd door runtime-id's (RID's)). Deze hulpprogramma's kunnen het volgende zijn:
- RID-specifiek: gecompileerd voor bepaalde besturingssystemen en architecturen.
- Zelfstandig: neem de .NET-runtime op en vereist geen afzonderlijke .NET-installatie.
- Systeemeigen AOT: gebruik vooraf compilatie voor sneller opstarten en kleinere geheugenvoetafdruk.
Gebruikers merken geen verschil wanneer ze het hulpprogramma installeren. De .NET CLI selecteert en installeert automatisch het beste pakket voor hun platform.
Aanmelden voor RID-specifieke verpakking
Als u een RID-specifiek hulpprogramma wilt maken, configureert u uw project met een van de volgende MSBuild-eigenschappen:
Eigenschap RuntimeIdentifiers
Gebruik RuntimeIdentifiers dit om de platforms op te geven die door uw hulpprogramma worden ondersteund:
<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>
Eigenschap ToolPackageRuntimeIdentifiers
U kunt ook gebruiken ToolPackageRuntimeIdentifiers voor hulpprogrammaspecifieke RID-configuratie:
<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>
Gebruik een door puntkomma's gescheiden lijst met RID-waarden. Zie de RID-catalogus voor een lijst met runtime-id's.
Wanneer gebruikt u RuntimeIdentifiers versus ToolPackageRuntimeIdentifiers
Zowel RuntimeIdentifiers als ToolPackageRuntimeIdentifiers activeert de rid-specifieke verpakking van uw hulpprogramma, maar ze hebben enigszins verschillende doeleinden:
Gebruik RuntimeIdentifiers wanneer:
- U wilt dat het project RID-specifieke apps in het algemeen bouwt en publiceert (niet alleen als een hulpprogramma).
- U richt zich voornamelijk op CoreCLR (niet-AOT) of u wilt het standaard-SDK-gedrag waarbij één enkele
dotnet packRID-specifieke pakketten produceert. - U kunt voorwaardelijk maken
PublishAotvoor een subset van RID's, maar u wilt nog steeds een CoreCLR-pakket voor elke RID inRuntimeIdentifiers.
Gebruik ToolPackageRuntimeIdentifiers wanneer:
- U wilt alleen RID-specifiek gedrag definiëren voor het verpakken van hulpprogramma's, zonder dat u hoeft te wijzigen hoe het project wordt gebouwd voor andere implementatiescenario's.
- U gebruikt systeemeigen AOT en bent van plan om handmatig binaire AOT-bestanden per RID te bouwen met
dotnet pack -r <RID>. - U wilt een hybride model waarbij sommige RID's systeemeigen AOT krijgen en anderen terugvallen op een draagbare CoreCLR-implementatie.
Notes:
- Met het aanwijzerpakket op het hoogste niveau worden de beschikbare RID-specifieke pakketten opgegeven. Als u
ToolPackageRuntimeIdentifiersopgeeft, bepaalt dat de tool-ID's; anders wordtRuntimeIdentifiersgebruikt. -
ToolPackageRuntimeIdentifiersmoet gelijk zijn aan of een subset van de RID's inRuntimeIdentifiers - Wanneer
PublishAot=true, RID-specifieke pakketten worden alleen gegenereerd wanneer u inpakt voor een specifieke RID (bijvoorbeelddotnet pack -r linux-x64). - Systeemeigen AOT-builds (
PublishAot=true) worden alleen ondersteund wanneer het build-OS en het doel-OS overeenkomen.
Uw hulpprogramma verpakken
Het verpakkingsproces verschilt, afhankelijk van of u AOT-compilatie gebruikt. Als u een NuGet-pakket of .nupkg-bestand wilt maken vanuit het project, voert u de opdracht dotnet pack uit.
RID-specifieke en zelfstandige hulpprogramma's
Eenmaal uitvoeren dotnet pack :
dotnet pack
Met deze opdracht worden meerdere NuGet-pakketten gemaakt:
- Eén pakket voor elke RID:
<packageName>.<RID>.<packageVersion>.nupkg- Voorbeeld:
mytool.win-x64.1.0.0.nupkg - Voorbeeld:
mytool.linux-x64.1.0.0.nupkg - Voorbeeld:
mytool.osx-arm64.1.0.0.nupkg
- Voorbeeld:
- Eén RID-agnostisch aanwijzerpakket:
<packageName>.<packageVersion>.nupkg- Voorbeeld:
mytool.1.0.0.nupkg
- Voorbeeld:
AOT-hulpprogramma's
Voor hulpprogramma's met AOT-compilatie (<PublishAot>true</PublishAot>) moet u afzonderlijk inpakken voor elk platform.
Platformvereisten voor systeemeigen AOT
Systeemeigen AOT-compilatie vereist dat het besturingssysteem (OS) van de SDK RID overeenkomt met het besturingssysteem van de doel-RID. De SDK kan kruislings compileren voor verschillende architecturen (bijvoorbeeld x64 naar ARM64), maar niet tussen besturingssystemen (bijvoorbeeld Windows naar Linux).
Dit betekent dat u verschillende opties hebt voor het bouwen van systeemeigen AOT-pakketten:
- Alleen bouwen voor uw ontwikkelcomputer: ondersteuning voor systeemeigen AOT alleen voor het besturingssysteem waarop u ontwikkelt.
-
Gebruik containers voor Linux-builds: als u macOS of Windows gebruikt, gebruikt u containers om kruislings te compileren voor Linux. Gebruik bijvoorbeeld
mcr.microsoft.com/dotnet/sdk:10.0-noble-aotcontainerafbeeldingen. - Uw build federeren op verschillende computers: gebruik CI/CD-systemen zoals GitHub Actions of Azure DevOps Pipelines om te bouwen op verschillende besturingssystemen.
U hoeft niet alle RID-specifieke pakketten op dezelfde computer of tegelijkertijd te bouwen. U hoeft ze alleen te bouwen en te publiceren voordat u het pakket op het hoogste niveau publiceert.
Native AOT-tools verpakken
Pak het pakket op het hoogste niveau eenmaal in (op elk platform):
dotnet pack
Verpak voor elke specifieke RID op het bijbehorende platform, bijvoorbeeld:
dotnet pack -r linux-x64
U moet elke RID-specifieke packopdracht uitvoeren op een platform waarop het besturingssysteem overeenkomt met het besturingssysteem van de doel-RID. Zie Systeemeigen AOT-implementatie voor meer informatie over de vereisten voor systeemeigen AOT-compilatie.
Wanneer u PublishAot instelt op true, verandert het verpakkingsgedrag:
-
dotnet packproduceert het aanwijzerpakket op het hoogste niveau (pakkettypeDotnetTool). - RID-specifieke AOT-pakketten worden alleen geproduceerd wanneer u expliciet doorgeeft
-r <RID>, bijvoorbeelddotnet pack -r linux-x64ofdotnet pack -r osx-arm64.
Patroon hybride AOT + CoreCLR-verpakkingspatroon (voorbeeld)
Sommige hulpprogramma's willen het beste van beide werelden:
- Systeemeigen AOT voor een subset van platforms met hoge prioriteit (afhankelijk van het hulpprogramma).
- Een draagbare CoreCLR-terugval die werkt op platforms waarop geen systeemeigen AOT-builds van toepassing zijn.
U kunt dit hybride model bereiken met het volgende patroon:
Configureer het hulpprogramma voor systeemeigen AOT en hulpprogrammaspecifieke RID's.
Gebruik
ToolPackageRuntimeIdentifiersin uw projectbestand en schakelPublishAotin.Voorbeeld:
<ToolPackageRuntimeIdentifiers>osx-arm64;linux-arm64;linux-x64;any</ToolPackageRuntimeIdentifiers> <PublishAot>true</PublishAot>Maak het aanwijzerpakket.
Eenmaal
dotnet packuitvoeren (op elk platform) om het pakket op het hoogste niveau te bouwen dat verwijst naar de RID-specifieke pakketten:dotnet packBouw systeemeigen AOT-pakketten voor geselecteerde RID's.
Voor native AOT-compilatie moet je bouwen op het doelplatform. Bouw elk RID-pakket met AOT-functionaliteit op het overeenkomende platform met behulp van
dotnet pack -r <RID>.
Voorbeeld:
dotnet pack -r linux-x64
Bouw een CoreCLR-terugvalpakket.
Als u een universele terugval wilt bieden, kunt u de
anyRID zonder AOT inpakken:dotnet pack -r any -p:PublishAot=falseDit produceert een draagbaar CoreCLR-pakket (bijvoorbeeld
yourtool.any.<version>.nupkg) dat kan worden uitgevoerd op platforms die geen toegewezen AOT-build hebben.
Opmerking
U kunt ook de .NET SDK 10.0-noble-aot containerinstallatiekopieën gebruiken om systeemeigen Linux-AOT-hulpprogramma's te bouwen en te verpakken vanaf elke host die Ondersteuning biedt voor Linux-containers. Voorbeeld:
mcr.microsoft.com/dotnet/sdk:10.0-noble-aot
Dit is handig wanneer op uw ontwikkelcomputer geen systeemeigen Linux wordt uitgevoerd.
In deze hybride installatie:
- Het aanwijzerpakket (
yourtool.<version>.nupkg) verwijst naar beide:- RID-specifieke systeemeigen AOT-pakketten (bijvoorbeeld
yourtool.osx-arm64,yourtool.linux-x64). - Het
anyCoreCLR-pakket als een reserveoptie.
- RID-specifieke systeemeigen AOT-pakketten (bijvoorbeeld
- De .NET CLI kiest automatisch het meest geschikte pakket voor het platform van de gebruiker wanneer zij
dotnet tool installofdnxuitvoeren.
Voorbeeld: dotnet10-hybrid-tool
De dotnet10-hybrid-tool repository demonstreert dit patroon voor hybride pakketten met systeemeigen AOT-pakketten voor osx-arm64, linux-arm64, en linux-x64, plus een CoreCLR-terugvalpakket voor de any RID (bijvoorbeeld op Windows wanneer er geen AOT-build beschikbaar is).
U kunt het hulpprogramma zelf installeren en uitproberen:
dotnet tool install -g dotnet10-hybrid-tool
dotnet10-hybrid-tool
Het hulpprogramma rapporteert de beschrijving van het runtimeframework, de runtime-id (RID) en de compilatiemodus (Native AOT of CoreCLR).
Voorbeelduitvoer op een platform met Native AOT:
Hi, I'm a 'DotNetCliTool v2' tool!
Yes, I'm quite fancy.
Version: .NET 10.0.2
RID: osx-arm64
Mode: Native AOT
Voorbeelduitvoer op een platform met behulp van de CoreCLR-terugval:
Hi, I'm a 'DotNetCliTool v2' tool!
Yes, I'm quite fancy.
Version: .NET 10.0.2
RID: win-x64
Mode: CoreCLR
Dit maakt het een handige manier om te experimenteren met RID-specifieke, AOT-gecompileerde hulpprogramma's en het coreCLR-terugvalgedrag.
Uw hulpprogramma publiceren
Bij het publiceren van RID-specifieke hulpprogrammapakketten gebruikt de .NET CLI het versienummer van het pakket op het hoogste niveau om de overeenkomende RID-specifieke pakketten te selecteren. Dit betekent:
- Alle RID-specifieke pakketten moeten exact dezelfde versie hebben als het pakket op het hoogste niveau.
- Alle pakketten moeten naar uw feed worden gepubliceerd voordat het pakket op het hoogste niveau beschikbaar wordt.
Een soepel publicatieproces garanderen:
Publiceer eerst alle RID-specifieke pakketten:
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.nupkgPubliceer het pakket op het hoogste niveau als laatste:
dotnet nuget push yourtool.1.0.0.nupkg
Door het pakket op het hoogste niveau als laatste te publiceren, zorgt u ervoor dat alle RID-specifieke pakketten beschikbaar zijn wanneer gebruikers uw hulpprogramma installeren. Als een gebruiker uw hulpprogramma installeert voordat alle RID-pakketten worden gepubliceerd, mislukt de installatie.
Hulpprogramma's installeren en uitvoeren
Of een hulpprogramma gebruikmaakt van RID-specifieke pakketten is een implementatiedetails die transparant is voor gebruikers. U installeert en voert hulpprogramma's op dezelfde manier uit, ongeacht of de ontwikkelaar van het hulpprogramma heeft gekozen voor een RID-specifieke verpakking.
Een hulpprogramma globaal installeren:
dotnet tool install -g mytool
Zodra de app is geïnstalleerd, kunt u deze rechtstreeks aanroepen:
mytool
U kunt ook de dnx helper gebruiken, die zich op dezelfde manier npx gedraagt als in het Node.js ecosysteem: het downloadt en start een hulpprogramma in één gebaar als deze nog niet aanwezig is:
dnx mytool
Wanneer een hulpprogramma gebruikmaakt van RID-specifieke pakketten, selecteert de .NET CLI automatisch het juiste pakket voor uw platform. U hoeft geen RID op te geven. De CLI geeft deze af van uw systeem en downloadt het juiste RID-specifieke pakket.