Overzicht van publicatie van .NET-toepassingen

Toepassingen die u met .NET maakt, kunnen in twee verschillende modi worden gepubliceerd en de modus is van invloed op de manier waarop een gebruiker uw app uitvoert.

Als u uw app publiceert als zelfstandig, wordt er een toepassing geproduceerd die de . NET-runtime en -bibliotheken bevat, en uw toepassing en de bijbehorende afhankelijkheden. Gebruikers van de toepassing kunnen deze uitvoeren op een computer waarop de .NET-runtime niet is geïnstalleerd.

Het publiceren van uw app als frameworkafhankelijke produceert een toepassing die alleen uw toepassing zelf en de bijbehorende afhankelijkheden bevat. Gebruikers van de toepassing moeten de .NET-runtime afzonderlijk installeren.

Beide publicatiemodi produceren standaard een platformspecifiek uitvoerbaar bestand. Frameworkafhankelijke toepassingen kunnen worden gemaakt zonder uitvoerbaar bestand en deze toepassingen zijn platformoverschrijdend.

Wanneer een uitvoerbaar bestand wordt geproduceerd, kunt u het doelplatform opgeven met een runtime-id (RID). Zie .NET RID-catalogus voor meer informatie over RID's.

De volgende tabel bevat een overzicht van de opdrachten die worden gebruikt om een app te publiceren als frameworkafhankelijk of zelfstandig, per SDK-versie:

Type SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Opdracht
frameworkafhankelijk uitvoerbaar bestand voor het huidige platform. ✔️ ✔️ ✔️ dotnet publish
frameworkafhankelijk uitvoerbaar bestand voor een specifiek platform. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
frameworkafhankelijk binair platformafhankelijk. ✔️ ✔️ ✔️ ✔️ dotnet publish
zelfstandig uitvoerbaar bestand. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Zie de opdracht .NET dotnet publish voor meer informatie.

Een uitvoerbaar bestand produceren

Uitvoerbare bestanden zijn niet platformoverschrijdend. Ze zijn specifiek voor een besturingssysteem en CPU-architectuur. Wanneer u uw app publiceert en een uitvoerbaar bestand maakt, kunt u de app publiceren als zelfstandig of frameworkafhankelijk. Het publiceren van een app als zelfstandige versie omvat de .NET-runtime met de app en gebruikers van de app hoeven zich geen zorgen te maken over het installeren van .NET voordat de app wordt uitgevoerd. Apps die zijn gepubliceerd als frameworkafhankelijk, bevatten niet de .NET-runtime en -bibliotheken; alleen de app- en externe afhankelijkheden zijn opgenomen.

Met de volgende opdrachten wordt een uitvoerbaar bestand geproduceerd:

Type SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Opdracht
frameworkafhankelijk uitvoerbaar bestand voor het huidige platform. ✔️ ✔️ ✔️ dotnet publish
frameworkafhankelijk uitvoerbaar bestand voor een specifiek platform. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
zelfstandig uitvoerbaar bestand. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Een platformoverschrijdend binair bestand produceren

Binaire bestanden voor meerdere platforms worden gemaakt wanneer u uw app publiceert als frameworkafhankelijk, in de vorm van een DLL-bestand . Het DLL-bestand heeft de naam van uw project. Als u bijvoorbeeld een app hebt met de naam word_reader, wordt er een bestand met de naam word_reader.dll gemaakt. Apps die op deze manier worden gepubliceerd, worden uitgevoerd met de dotnet <filename.dll> opdracht en kunnen op elk platform worden uitgevoerd.

Binaire bestanden op meerdere platforms kunnen op elk besturingssysteem worden uitgevoerd zolang de beoogde .NET-runtime al is geïnstalleerd. Als de doelruntime van .NET niet is geïnstalleerd, kan de app worden uitgevoerd met een nieuwere runtime als de app is geconfigureerd om door te rollen. Zie voor meer informatie de rol van frameworkafhankelijke apps.

Met de volgende opdracht wordt een binair platformoverschrijdend bestand geproduceerd:

Type SDK 2.1 SDK 3.x SDK 5.0 SDK 6.0 Opdracht
frameworkafhankelijk binair platformafhankelijk. ✔️ ✔️ ✔️ ✔️ dotnet publish

Frameworkafhankelijk publiceren

Apps die als frameworkafhankelijk zijn gepubliceerd, zijn platformoverschrijdend en bevatten geen .NET-runtime. De gebruiker van uw app is vereist om de .NET-runtime te installeren.

Het publiceren van een app als frameworkafhankelijk produceert een platformoverschrijdend binair bestand als eenDLL-bestand en een platformspecifiek uitvoerbaar bestand dat gericht is op uw huidige platform. Het dll-bestand is platformoverschrijdend, terwijl het uitvoerbare bestand niet is. Als u bijvoorbeeld een app met de naam word_reader en doel-Windows publiceert, wordt er samen met word_reader.dlleen word_reader.exe uitvoerbaar bestand gemaakt. Wanneer linux of macOS wordt gericht, wordt er samen met word_reader.dlleen word_reader uitvoerbaar bestand gemaakt. Zie .NET RID-catalogus voor meer informatie over RID's.

Belangrijk

.NET SDK 2.1 produceert geen platformspecifieke uitvoerbare bestanden wanneer u een app-frameworkafhankelijk publiceert.

Het platformoverschrijdende binaire bestand van uw app kan worden uitgevoerd met de dotnet <filename.dll> opdracht en kan worden uitgevoerd op elk platform. Als de app gebruikmaakt van een NuGet-pakket met platformspecifieke implementaties, worden de afhankelijkheden van alle platforms samen met de app gekopieerd naar de publicatiemap.

U kunt een uitvoerbaar bestand voor een specifiek platform maken door de -r <RID> --self-contained false parameters door te geven aan de dotnet publish opdracht. Wanneer de -r parameter wordt weggelaten, wordt er een uitvoerbaar bestand gemaakt voor uw huidige platform. NuGet-pakketten met platformspecifieke afhankelijkheden voor het doelplatform worden gekopieerd naar de publicatiemap. Als u geen platformspecifiek uitvoerbaar bestand nodig hebt, kunt u opgeven <UseAppHost>False</UseAppHost> in het projectbestand. Zie MSBuild-naslaginformatie voor .NET SDK-projecten voor meer informatie.

Voordelen

  • Kleine implementatie
    Alleen uw app en de bijbehorende afhankelijkheden worden gedistribueerd. De .NET-runtime en -bibliotheken worden door de gebruiker geïnstalleerd en alle apps delen de runtime.

  • Platformoverschrijdend
    Uw app en elke app. Bibliotheek op basis van NET wordt uitgevoerd op andere besturingssystemen. U hoeft geen doelplatform voor uw app te definiëren. Zie .NET Assembly-bestandsindeling voor informatie over de .NET-bestandsindeling.

  • Maakt gebruik van de meest recente gepatchte runtime
    De app maakt gebruik van de meest recente runtime (binnen de doel-secundaire familie van .NET) die op het doelsysteem is geïnstalleerd. Dit betekent dat uw app automatisch gebruikmaakt van de meest recente patchversie van de .NET-runtime. Dit standaardgedrag kan worden overschreven. Zie voor meer informatie de rol van frameworkafhankelijke apps.

Nadelen

  • Vereist dat de runtime vooraf wordt geïnstalleerd
    Uw app kan alleen worden uitgevoerd als de versie van .NET uw app-doelen al op het hostsysteem zijn geïnstalleerd. U kunt het gedrag van roll-forward configureren voor de app om een specifieke versie van .NET te vereisen of een nieuwere versie van .NET toe te staan. Zie voor meer informatie de rol van frameworkafhankelijke apps.

  • .NET kan veranderen
    Het is mogelijk dat de .NET-runtime en -bibliotheken worden bijgewerkt op de computer waarop de app wordt uitgevoerd. In zeldzame gevallen kan dit het gedrag van uw app wijzigen als u de .NET-bibliotheken gebruikt, wat de meeste apps doen. U kunt configureren hoe uw app gebruikmaakt van nieuwere versies van .NET. Zie voor meer informatie de rol van frameworkafhankelijke apps.

Het volgende nadeel is alleen van toepassing op .NET Core 2.1 SDK.

  • Gebruik de dotnet opdracht om de app te starten
    Gebruikers moeten de dotnet <filename.dll> opdracht uitvoeren om uw app te starten. .NET Core 2.1 SDK produceert geen platformspecifieke uitvoerbare bestanden voor apps die afhankelijk zijn van het gepubliceerde framework.

Voorbeelden

Publiceer een platformoverschrijdende frameworkafhankelijke app. Er wordt een uitvoerbaar bestand gemaakt dat is gericht op uw huidige platform, samen met het DLL-bestand .

dotnet publish

Publiceer een platformoverschrijdende frameworkafhankelijke app. Er wordt een uitvoerbaar Linux 64-bits bestand gemaakt, samen met het DLL-bestand . Deze opdracht werkt niet met .NET Core SDK 2.1.

dotnet publish -r linux-x64 --self-contained false

Zelf-ingesloten publiceren

Als u uw app publiceert als zelfstandig, produceert u een platformspecifiek uitvoerbaar bestand. De uitvoerpublicatiemap bevat alle onderdelen van de app, waaronder de .NET-bibliotheken en de doelruntime. De app is geïsoleerd van andere .NET-apps en gebruikt geen lokaal geïnstalleerde gedeelde runtime. De gebruiker van uw app is niet vereist om .NET te downloaden en te installeren.

Het uitvoerbare binaire bestand wordt geproduceerd voor het opgegeven doelplatform. Als u bijvoorbeeld een app met de naam word_reader hebt en u een zelfstandig uitvoerbaar bestand voor Windows publiceert, wordt er een word_reader.exe-bestand gemaakt. Publiceren voor Linux of macOS, er wordt een word_reader-bestand gemaakt. Het doelplatform en de architectuur worden opgegeven met de -r <RID> parameter voor de dotnet publish opdracht. Zie .NET RID-catalogus voor meer informatie over RID's.

Als de app platformspecifieke afhankelijkheden heeft, zoals een NuGet-pakket met platformspecifieke afhankelijkheden, worden deze gekopieerd naar de publicatiemap samen met de app.

Voordelen

  • .NET-versie beheren
    U bepaalt welke versie van .NET wordt geïmplementeerd met uw app.

  • Platformspecifieke targeting
    Omdat u uw app voor elk platform moet publiceren, weet u waar uw app wordt uitgevoerd. Als .NET een nieuw platform introduceert, kunnen gebruikers uw app pas op dat platform uitvoeren als u een versie op dat platform vrijgeeft. U kunt uw app testen op compatibiliteitsproblemen voordat uw gebruikers uw app uitvoeren op het nieuwe platform.

Nadelen

  • Grotere implementaties
    Omdat uw app de .NET-runtime en al uw app-afhankelijkheden bevat, is de vereiste downloadgrootte en schijfruimte groter dan een frameworkafhankelijke versie.

    Tip

    U kunt de grootte van uw implementatie op Linux-systemen met ongeveer 28 MB verkleinen met behulp van de invariante modus voor .NET-globalisatie. Dit dwingt uw app om alle culturen te behandelen, zoals de invariante cultuur.

    Tip

    IL-triming kan de grootte van uw implementatie verder verkleinen.

  • Moeilijker om de .NET-versie bij te werken
    .NET Runtime (gedistribueerd met uw app) kan alleen worden bijgewerkt door een nieuwe versie van uw app vrij te geven. .NET werkt echter essentiële beveiligingspatches bij indien nodig voor de frameworkbibliotheek op de computer waarop uw app wordt uitgevoerd. U bent verantwoordelijk voor end-to-end validatie voor dit beveiligingspatchscenario.

Voorbeelden

Een app zelfstandig publiceren. Er wordt een macOS 64-bits uitvoerbaar bestand gemaakt.

dotnet publish -r osx-x64

Een app zelfstandig publiceren. Er wordt een Windows 64-bits uitvoerbaar bestand gemaakt.

dotnet publish -r win-x64

Publiceren met ReadyToRun-installatiekopieën

Publiceren met ReadyToRun-installatiekopieën verbetert de opstarttijd van uw toepassing ten koste van het vergroten van de grootte van uw toepassing. Zie ReadyToRun voor meer informatie om te publiceren met ReadyToRun .

Voordelen

  • Verbeterde opstarttijd
    De toepassing besteedt minder tijd aan het uitvoeren van de JIT.

Nadelen

  • Groter formaat
    De toepassing is groter op schijf.

Voorbeelden

Een zelfstandige app en ReadyToRun publiceren. Er wordt een macOS 64-bits uitvoerbaar bestand gemaakt.

dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true

Een zelfstandige app en ReadyToRun publiceren. Er wordt een Windows 64-bits uitvoerbaar bestand gemaakt.

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

Zie ook