Översikt över .NET-programpublicering

Program som du skapar med .NET kan publiceras i två olika lägen och läget påverkar hur en användare kör din app.

När du publicerar appen som fristående skapas ett program som innehåller . NET-körningen och -biblioteken samt ditt program och dess beroenden. Användare av programmet kan köra det på en dator som inte har .NET-körningen installerad.

När du publicerar din app som ramverksberoende skapas ett program som endast innehåller själva programmet och dess beroenden. Användare av programmet måste installera .NET-körningen separat.

Båda publiceringslägena skapar en plattformsspecifik körbar fil som standard. Ramverksberoende program kan skapas utan körbar fil, och dessa program är plattformsoberoende.

När en körbar fil skapas kan du ange målplattformen med en körningsidentifierare (RID). Mer information om RID:er finns i .NET RID Catalog.

I följande tabell beskrivs de kommandon som används för att publicera en app som ramverksberoende eller fristående, per SDK-version:

Typ SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Kommando
ramverksberoende körbar för den aktuella plattformen. ✔️ ✔️ ✔️ dotnet publish
ramverksberoende körbar fil för en specifik plattform. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
ramverksberoende binärt plattformsoberoende. ✔️ ✔️ ✔️ ✔️ dotnet publish
fristående körbar fil. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Mer information finns i publiceringskommandot för .NET dotnet.

Skapa en körbar fil

Körbara filer är inte plattformsoberoende. De är specifika för ett operativsystem och en CPU-arkitektur. När du publicerar din app och skapar en körbar fil kan du publicera appen som fristående eller ramverksberoende. När du publicerar en app som fristående ingår .NET-körningen med appen, och användarna av appen behöver inte bekymra sig om att installera .NET innan de kör appen. Appar som publiceras som ramverksberoende innehåller inte .NET-körningen och biblioteken. endast appen och beroenden från tredje part ingår.

Följande kommandon skapar en körbar fil:

Typ SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Kommando
ramverksberoende körbar för den aktuella plattformen. ✔️ ✔️ ✔️ dotnet publish
ramverksberoende körbar fil för en specifik plattform. ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
fristående körbar fil. ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

Skapa en plattformsoberoende binärfil

Plattformsoberoende binärfiler skapas när du publicerar din app som ramverksberoende i form av en dll-fil . Dll-filen har fått namnet efter projektet. Om du till exempel har en app med namnet word_reader skapas en fil med namnet word_reader.dll . Appar som publiceras på det här sättet körs med dotnet <filename.dll> kommandot och kan köras på valfri plattform.

Plattformsoberoende binärfiler kan köras på alla operativsystem så länge den riktade .NET-körningen redan är installerad. Om den riktade .NET-körningen inte är installerad kan appen köras med en nyare körning om appen är konfigurerad för att distribueras. Mer information finns i Avsnittet om ramverksberoende appar för vidarekoppling.

Följande kommando skapar en plattformsoberoende binärfil:

Typ SDK 2.1 SDK 3.x SDK 5.0 SDK 6.0 Kommando
ramverksberoende binärt plattformsoberoende. ✔️ ✔️ ✔️ ✔️ dotnet publish

Publicera ramverksberoende

Appar som publiceras som ramverksberoende är plattformsoberoende och inkluderar inte .NET-körningen. Användaren av din app måste installera .NET-körningen.

Om du publicerar en app som ramverksberoende skapas en plattformsoberoende binär fil som en dll-fil och en plattformsspecifik körbar fil som riktar sig mot din aktuella plattform. DLL:en är plattformsoberoende medan den körbara filen inte är det. Om du till exempel publicerar en app med namnet word_reader och mål Windows skapas en word_reader.exe körbar fil tillsammans med word_reader.dll. När du riktar in dig på Linux eller macOS skapas en körbar word_reader tillsammans med word_reader.dll. Mer information om RID:er finns i .NET RID Catalog.

Viktigt

.NET SDK 2.1 producerar inte plattformsspecifika körbara filer när du publicerar ett appramverk som är beroende av.

Den plattformsoberoende binärfilen för din app kan köras med dotnet <filename.dll> kommandot och kan köras på valfri plattform. Om appen använder ett NuGet-paket som har plattformsspecifika implementeringar kopieras alla plattformars beroenden till publiceringsmappen tillsammans med appen.

Du kan skapa en körbar fil för en specifik plattform genom att skicka parametrarna -r <RID> --self-contained falsedotnet publish till kommandot. När parametern -r utelämnas skapas en körbar fil för din aktuella plattform. Alla NuGet-paket som har plattformsspecifika beroenden för målplattformen kopieras till publiceringsmappen. Om du inte behöver en plattformsspecifik körbar fil kan du ange <UseAppHost>False</UseAppHost> i projektfilen. Mer information finns i MSBuild-referens för .NET SDK-projekt.

Fördelar

  • Liten distribution
    Endast din app och dess beroenden distribueras. .NET-körningen och biblioteken installeras av användaren och alla appar delar körningen.

  • Plattformsoberoende
    Din app och eventuella . NET-baserat bibliotek körs på andra operativsystem. Du behöver inte definiera en målplattform för din app. Information om .NET-filformatet finns i .NET-sammansättningsfilformat.

  • Använder den senaste korrigerade körningen
    Appen använder den senaste körningen (inom den riktade större mindre serien av .NET) som är installerad på målsystemet. Det innebär att din app automatiskt använder den senaste korrigerade versionen av .NET-körningen. Det här standardbeteendet kan åsidosättas. Mer information finns i avsnittet om ramverksberoende appar som distribueras.

Nackdelar

  • Kräver förinstallation av körningen
    Din app kan bara köras om den version av .NET som din app riktar sig mot redan är installerad på värdsystemet. Du kan konfigurera roll-forward-beteende för appen så att den antingen kräver en specifik version av .NET eller tillåter en nyare version av .NET. Mer information finns i avsnittet om ramverksberoende appar som distribueras.

  • .NET kan ändras
    Det är möjligt att .NET-körningen och biblioteken uppdateras på den dator där appen körs. I sällsynta fall kan detta ändra appens beteende om du använder .NET-biblioteken, vilket de flesta appar gör. Du kan konfigurera hur din app använder nyare versioner av .NET. Mer information finns i avsnittet om ramverksberoende appar som distribueras.

Följande nackdel gäller endast för .NET Core 2.1 SDK.

  • dotnet Använd kommandot för att starta appen
    Användarna måste köra dotnet <filename.dll> kommandot för att starta appen. .NET Core 2.1 SDK producerar inte plattformsspecifika körbara filer för appar som publicerats ramverksberoende.

Exempel

Publicera en app som är plattformsoberoende. En körbar fil som riktar sig mot din aktuella plattform skapas tillsammans med dll-filen .

dotnet publish

Publicera en app som är plattformsoberoende. En 64-bitars körbar Linux-fil skapas tillsammans med dll-filen . Det här kommandot fungerar inte med .NET Core SDK 2.1.

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

Publicera fristående

När du publicerar din app som fristående skapas en plattformsspecifik körbar fil. Utdatapubliceringsmappen innehåller alla komponenter i appen, inklusive .NET-biblioteken och målkörningen. Appen är isolerad från andra .NET-appar och använder inte en lokalt installerad delad körning. Användaren av din app behöver inte ladda ned och installera .NET.

Den körbara binärfilen skapas för den angivna målplattformen. Om du till exempel har en app med namnet word_reader och du publicerar en självständig körbar fil för Windows skapas en word_reader.exe fil. Publicering för Linux eller macOS skapas en word_reader fil. Målplattformen och arkitekturen anges med parametern -r <RID>dotnet publish för kommandot . Mer information om RID finns i .NET RID Catalog.

Om appen har plattformsspecifika beroenden, till exempel ett NuGet-paket som innehåller plattformsspecifika beroenden, kopieras dessa till publiceringsmappen tillsammans med appen.

Fördelar

  • Kontrollera .NET-version
    Du styr vilken version av .NET som distribueras med din app.

  • Plattformsspecifik inriktning
    Eftersom du måste publicera din app för varje plattform vet du var appen kommer att köras. Om .NET introducerar en ny plattform kan användarna inte köra din app på den plattformen förrän du har släppt en version för den plattformen. Du kan testa din app för kompatibilitetsproblem innan användarna kör appen på den nya plattformen.

Nackdelar

  • Större distributioner
    Eftersom din app innehåller .NET-körningen och alla dina appberoenden är nedladdningsstorleken och hårddiskutrymmet som krävs större än en ramverksberoende version.

    Tips

    Du kan minska storleken på distributionen på Linux-system med cirka 28 MB med hjälp av . NET-globalisering i variant läge. Detta tvingar din app att behandla alla kulturer som den invarianta kulturen.

    Tips

    IL-trimning kan ytterligare minska storleken på distributionen.

  • Svårare att uppdatera .NET-versionen
    .NET Runtime (distribueras med din app) kan bara uppgraderas genom att släppa en ny version av din app. .NET uppdaterar dock kritiska säkerhetskorrigeringar efter behov för ramverksbiblioteket på den dator som appen körs på. Du ansvarar för slutpunkt till slutpunkt-validering för det här säkerhetskorrigeringsscenariot.

Exempel

Publicera en fristående app. En 64-bitars körbar macOS-fil skapas.

dotnet publish -r osx-x64

Publicera en fristående app. En Windows 64-bitars körbar fil skapas.

dotnet publish -r win-x64

Publicera med ReadyToRun-avbildningar

Om du publicerar med ReadyToRun-avbildningar förbättras starttiden för ditt program på bekostnad av att öka storleken på ditt program. Mer information finns i ReadyToRun för att publicera med ReadyToRun.

Fördelar

  • Förbättrad starttid
    Programmet ägnar mindre tid åt att köra JIT.

Nackdelar

  • Större storlek
    Programmet blir större på disken.

Exempel

Publicera en app som är fristående och ReadyToRun. En 64-bitars körbar macOS-fil skapas.

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

Publicera en app som är fristående och ReadyToRun. En Windows 64-bitars körbar fil skapas.

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

Se även