Overzicht van .NET-toepassingspublicatie
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 een zelfstandige toepassing, produceert dit een applicatie die de .NET-runtime en -bibliotheken bevat, evenals uw applicatie 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 Catalogvoor meer informatie over RID's.
De volgende tabel bevat een overzicht van de opdrachten die worden gebruikt om een app als frameworkafhankelijk of zelfstandig te publiceren:
Type | Bevelen |
---|---|
frameworkafhankelijk uitvoerbare voor het huidige platform. | dotnet publish |
frameworkafhankelijk uitvoerbare voor een specifiek platform. | dotnet publish -r <RID> |
frameworkafhankelijke binaire. | dotnet publish |
zelfstandige uitvoerbare. | dotnet publish -r <RID> --self-contained |
Zie .NET dotnet publish commandvoor 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 zelfstandige of frameworkafhankelijke. Het publiceren van een app als zelfstandig 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. Het publiceren van een app als frameworkafhankelijk omvat niet de .NET-runtime; alleen de app- en externe afhankelijkheden zijn opgenomen.
Met de volgende opdrachten wordt een uitvoerbaar bestand geproduceerd:
Type | Bevelen |
---|---|
is een frameworkafhankelijk executable voor het huidige platform. | dotnet publish |
frameworkafhankelijk uitvoerbare voor een specifiek platform. | dotnet publish -r <RID> |
zelfstandig uitvoerbaar bestand. | dotnet publish -r <RID> --self-contained |
Een platformoverschrijdend binair bestand produceren
Binaire bestanden voor meerdere platforms worden gemaakt wanneer u uw app publiceert als frameworkafhankelijke, in de vorm van een dll--bestand. Het dll-bestand is vernoemd naar je 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 opdracht dotnet <filename.dll>
en kunnen op elk platform worden uitgevoerd.
Binaire bestanden op meerdere platforms kunnen worden uitgevoerd op elk besturingssysteem zolang de beoogde .NET-runtime al is geïnstalleerd. Als de beoogde .NET-runtime niet is geïnstalleerd, kan de app worden uitgevoerd met behulp van een nieuwere runtime als de app is geconfigureerd om door te draaien. Zie frameworkafhankelijke appsdoorsturen voor meer informatie.
U kunt ervoor kiezen om de app uit te voeren als een platformspecifiek uitvoerbaar bestand of als een platformoverschrijdend binair bestand via dotnet
opdracht. Er mag geen verschil zijn in app-gedrag bij het starten van het platformspecifieke uitvoerbare bestand versus de dotnet
-opdracht voor gewone server-apps die worden gestart via een platformspecifiek uitvoerbaar bestand, biedt u een betere integratie met het onderliggende besturingssysteem. Bijvoorbeeld:
- U ziet de uitvoerbare naam van de toepassing in de lijst met processen en niet
dotnet
, wat verwarrend kan zijn als er meer dan één is. - U kunt het platformspecifieke uitvoerbare bestand aanpassen met specifieke functies van het besturingssysteem. Zie bijvoorbeeld deze discussie over het configureren van de standaardstackgrootte in Windows.
De volgende opdracht produceert een platformoverschrijdend binair bestand:
Typ | Bevelen |
---|---|
platformonafhankelijke frameworkafhankelijke binaire. | dotnet publish |
Frameworkafhankelijk publiceren
Apps die als frameworkafhankelijk zijn gepubliceerd, zijn platformoverschrijdend en bevatten geen .NET-runtime. De gebruiker van uw app moet de .NET-runtime installeren.
Het publiceren van een app als frameworkafhankelijk produceert een platformoverschrijdende binaire als een dll-bestand en een platformspecifiek uitvoerbaar bestand dat is gericht op uw huidige platform. De dll- is platformonafhankelijk, terwijl het uitvoerbare bestand dat niet is. Als u bijvoorbeeld een app met de naam word_reader en Windows als doel publiceert, wordt er een uitvoerbaar word_reader.exe gemaakt, samen met word_reader.dll. Bij het richten op Linux of macOS wordt een word_reader uitvoerbaar bestand gemaakt, samen met word_reader.dll. Als de app gebruikmaakt van een NuGet-pakket met platformspecifieke implementaties, worden afhankelijkheden voor alle platforms gekopieerd naar de map publish\rruntimes\{platform}.
Het platformoverschrijdende binaire bestand van uw app kan worden uitgevoerd met de opdracht dotnet <filename.dll>
en kan op elk platform worden uitgevoerd.
Platform-specifiek en framework-afhankelijk
U kunt een frameworkafhankelijke app publiceren die specifiek is voor het platform door de -r <RID>
parameters door te geven aan de opdracht dotnet publish
. Publiceren op deze manier is hetzelfde als frameworkafhankelijkepubliceren, behalve dat platformspecifieke afhankelijkheden anders worden afgehandeld. Als de app gebruikmaakt van een NuGet-pakket met platformspecifieke implementaties, worden alleen de afhankelijkheden van het doelplatform gekopieerd. Deze afhankelijkheden worden rechtstreeks gekopieerd naar de publicatiemap .
Hoewel technisch gezien het geproduceerde binaire bestand platformoverschrijdend is, is het niet gegarandeerd dat uw app platformoverschrijdend wordt uitgevoerd. U kunt dotnet <filename.dll>
uitvoeren, maar de app kan vastlopen wanneer wordt geprobeerd toegang te krijgen tot platformspecifieke afhankelijkheden die ontbreken.
Zie .NET RID Catalogvoor meer informatie over RID's.
Voordelen
kleine implementatie
Alleen uw app en de bijbehorende afhankelijkheden worden gedistribueerd. De .NET-runtime en -bibliotheken worden geïnstalleerd door de gebruiker en alle apps delen de runtime.platformoverschrijdend
Uw app en elke .NET-gebaseerde bibliotheek draaien op andere besturingssystemen. U hoeft geen doelplatform voor uw app te definiëren. Voor informatie over de .NET-bestandsindeling, zie .NET Assembly-bestandsindeling.maakt gebruik van de meest recente gepatchte runtime-
De app maakt gebruik van de nieuwste runtime (binnen de doel-hoofd- en subversie 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 frameworkafhankelijke appsdoorsturen voor meer informatie.
Nadelen
Vereist dat de runtime- vooraf wordt geïnstalleerd
Uw app kan alleen worden uitgevoerd als de versie van .NET waarop uw app is gericht al op het hostsysteem is geïnstalleerd. U kunt roll-forward-gedrag voor de app configureren om een specifieke versie van .NET te vereisen of een nieuwere versie van .NET toe te staan. Zie frameworkafhankelijke appsdoorsturen voor meer informatie..NET kan wijzigen
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 frameworkafhankelijke appsdoorsturen voor meer informatie.
Voorbeelden
Publiceer een app als platformoverschrijdend en frameworkafhankelijk. Er wordt een uitvoerbaar bestand gemaakt dat is gericht op uw huidige platform, samen met het dll-bestand bestand. Platformspecifieke afhankelijkheden worden gepubliceerd met de app.
dotnet publish
Publiceer een app als platformspecifiek en frameworkafhankelijk. Er wordt een 64-bits Linux-uitvoerbaar bestand gemaakt, samen met het dll-bestand. Alleen de afhankelijkheden van het doelplatform worden gepubliceerd met de app.
dotnet publish -r linux-x64
Zelfstandig publiceren
Als u uw app als zelfstandig publiceert, wordt een platformspecifiek uitvoerbaar bestand geproduceerd. De uitvoerpublicatiemap bevat alle onderdelen van de app, waaronder de .NET-bibliotheken en doelruntime. De app is geïsoleerd van andere .NET-apps en gebruikt geen lokaal geïnstalleerde gedeelde runtime. Gebruikers van uw app hoeven .NET niet te downloaden en te installeren.
U kunt een zelfstandige app publiceren door de parameter --self-contained
door te geven aan de opdracht dotnet publish
. Het uitvoerbare binaire bestand wordt geproduceerd voor het opgegeven doelplatform. Als u bijvoorbeeld een app hebt met de naam word_readeren 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 parameter -r <RID>
voor de opdracht dotnet publish
. Zie .NET RID Catalogvoor meer informatie over RID's.
Als de app platformspecifieke afhankelijkheden heeft, zoals een NuGet-pakket met platformspecifieke afhankelijkheden, worden deze samen met de app gekopieerd naar de publicatiemap.
Voordelen
.NET-versie beheren
U bepaalt welke versie van .NET wordt geïmplementeerd met uw app.platformspecifieke
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 nadat u een versie hebt uitgebracht die gericht is op dat platform. 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 downloadgrootte en de benodigde schijfruimte groter dan een frameworkafhankelijke versie.Fooi
U kunt de implementatie op Linux-systemen met ongeveer 28 MB verkleinen met behulp van .NET invariant-modus voor globalisatie. Dit dwingt uw app om alle culturen als de invariante cultuurte behandelen.
Tip
IL-bijsnijding kan de grootte van uw implementatie verder verminderen.
Het is 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 uit te brengen.
Voorbeelden
Een zelfvoorzienende app publiceren. Er wordt een 64-bits macOS-uitvoerbaar bestand gemaakt.
dotnet publish -r osx-x64 --self-contained
Een app zelf publiceren. Er wordt een windows 64-bits uitvoerbaar bestand gemaakt.
dotnet publish -r win-x64 --self-contained
Publiceren met ReadyToRun-images
Het publiceren met ReadyToRun-installatiekopieën verbetert de opstarttijd van uw toepassing ten koste van het vergroten van de grootte van uw toepassing. Zie ReadyToRunvoor meer informatie.
Voordelen
-
Verbeterde opstarttijd
De toepassing besteedt minder tijd aan het uitvoeren van de JIT.
Nadelen
-
groter formaat
De toepassing is groter op schijf.
Voorbeelden
Publiceer een zelfstandige app en maak deze ReadyToRun. Er wordt een 64-bits macOS-uitvoerbaar bestand gemaakt.
dotnet publish -c Release -r osx-x64 --self-contained -p:PublishReadyToRun=true
Publiceer een zelfstandige en ReadyToRun-app. Er wordt een windows 64-bits uitvoerbaar bestand gemaakt.
dotnet publish -c Release -r win-x64 --self-contained -p:PublishReadyToRun=true