Veröffentlichen von .NET-Apps mit der .NET-CLI

In diesem Artikel wird veranschaulicht, wie Sie Ihre .NET-Anwendung über die Befehlszeile veröffentlichen. .NET bietet drei Möglichkeiten zum Veröffentlichen Ihrer Anwendungen. Die frameworkabhängige Bereitstellung erzeugt eine plattformübergreifende DLL-Datei, die die lokal installierte .NET-Runtime verwendet. Die frameworkabhängige ausführbare Datei erzeugt eine plattformspezifische ausführbare Datei, die die lokal installierte .NET-Runtime verwendet. Die eigenständige ausführbare Datei erzeugt eine plattformspezifische ausführbare Datei, die eine lokale Kopie der .NET-Runtime enthält.

Eine Übersicht über diese Veröffentlichungsmodi finden Sie unter .NET-Anwendungsbereitstellung.

Benötigen Sie schnelle Hilfe zur Verwendung der CLI? In der folgenden Tabelle finden Sie einige Beispiele zum Veröffentlichen Ihrer App. Sie können das Zielframework mit dem -f <TFM>-Parameter oder durch Bearbeiten der Projektdatei festlegen. Weitere Informationen finden Sie in den Grundlagen der Veröffentlichung.

Veröffentlichungsmodus SDK-Version Befehl
Framework-abhängige Bereitstellung 2.1 dotnet publish -c Release
3.1 dotnet publish -c Release -p:UseAppHost=false
5.0 dotnet publish -c Release -p:UseAppHost=false
6.0 dotnet publish -c Release -p:UseAppHost=false
Frameworkabhängige ausführbare Datei 3.1 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
5.0 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
6.0 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
Eigenständige Bereitstellung 2.1 dotnet publish -c Release -r <RID> --self-contained true
3.1 dotnet publish -c Release -r <RID> --self-contained true
5.0 dotnet publish -c Release -r <RID> --self-contained true
6.0 dotnet publish -c Release -r <RID> --self-contained true

* Bei Verwendung von SDK-Version 3.1 oder höher ist die frameworkabhängige ausführbare Datei der Standardveröffentlichungsmodus, wenn der Basic-Befehl dotnet publish ausgeführt wird.

Hinweis

Der Parameter -c Release ist nicht erforderlich. Er wird als Erinnerung zum Veröffentlichen des Release-Builds Ihrer App bereitgestellt.

Grundlagen der Veröffentlichung

Die <TargetFramework>-Einstellung der Projektdatei gibt das Standardzielframework an, wenn Sie Ihre App veröffentlichen. Sie können das Zielframework in einen beliebigen, gültigen Zielframeworkmoniker (TFM) ändern. Wenn Sie in Ihrem Projekt beispielsweise <TargetFramework>netcoreapp2.1</TargetFramework> verwenden, wird eine Binärdatei für .NET Core 2.1 erstellt. Der mit dieser Einstellung festgelegte TFM ist das Standardziel des dotnet publish-Befehls.

Sie können mehrere durch Semikolons getrennte TFM-Werte in der <TargetFrameworks>-Einstellung festlegen, wenn Sie mehr als ein Zielframework benötigen. Wenn Sie die App erstellen, wird für jedes Zielframework ein Build erstellt. Wenn Sie jedoch die App veröffentlichen, müssen Sie das Zielframework mit dem dotnet publish -f <TFM>-Befehl angeben.

Sofern es nicht anders festgelegt ist, ist ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/ das Ausgabeverzeichnis des dotnet publish-Befehls. Der BUILD-CONFIGURATION-Standardmodus ist Debug, sofern er nicht mithilfe des -c-Parameters geändert wurde. Zum Beispiel wird mit dotnet publish -c Release -f netcoreapp2.1 in ./bin/Release/netcoreapp2.1/publish/ veröffentlicht.

Wenn Sie .NET Core SDK 3.1 oder höher verwenden, ist der standardmäßige Veröffentlichungsmodus „frameworkabhängigausführbar“.

Wenn Sie .NET Core SDK 2.1 verwenden, ist der standardmäßige Veröffentlichungsmodus „frameworkabhängigeBereitstellung“.

Native Abhängigkeiten

Wenn Ihre App über native Abhängigkeiten verfügt, kann sie auf anderen Betriebssystemen möglicherweise nicht ausgeführt werden. Wenn Ihre App beispielsweise die native Windows-API verwendet, kann sie nicht unter macOS oder Linux ausgeführt werden. In diesem Fall müssten Sie plattformspezifischen Code bereitstellen und eine ausführbare Datei für jede Plattform kompilieren.

Beachten Sie außerdem, dass Ihre App möglicherweise nicht auf jeder Plattform ausgeführt werden kann, wenn Sie auf eine Bibliothek verwiesen haben, die eine native Abhängigkeit aufweist. Es ist jedoch möglich, dass ein NuGet-Paket, auf das Sie verweisen, plattformspezifische Versionen enthält, um die erforderlichen nativen Abhängigkeiten für Sie zu verarbeiten.

Beim Verteilen einer App mit nativen Abhängigkeiten müssen Sie möglicherweise den dotnet publish -r <RID>-Switch verwenden, um die Zielplattform für Ihre Veröffentlichung anzugeben. Eine Liste der Runtimebezeichner (RID) finden Sie im RID-Katalog.

Weitere Informationen zu plattformspezifischen Binärdateien finden Sie in den Abschnitten Frameworkabhängige ausführbare Datei und Eigenständige Bereitstellung.

Beispiel-App

Sie können die folgende App zum Kennenlernen der Veröffentlichungsbefehle verwenden. Erstellen Sie die App, indem Sie die folgenden Befehle im Terminal ausführen:

mkdir apptest1
cd apptest1
dotnet new console
dotnet add package Figgle

Sie müssen den Inhalt der von der Konsolenvorlage erstellten Program.cs- oder Program.vb-Datei in Folgenden ändern:

using System;

namespace apptest1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"));
        }
    }
}
Module Program
    Sub Main(args As String())
        Console.WriteLine(Figgle.FiggleFonts.Standard.Render("Hello, World!"))
    End Sub
End Module

Wenn Sie die App ausführen (dotnet run), wird die folgende Ausgabe angezeigt:

  _   _      _ _         __        __         _     _ _
 | | | | ___| | | ___    \ \      / /__  _ __| | __| | |
 | |_| |/ _ \ | |/ _ \    \ \ /\ / / _ \| '__| |/ _` | |
 |  _  |  __/ | | (_) |    \ V  V / (_) | |  | | (_| |_|
 |_| |_|\___|_|_|\___( )    \_/\_/ \___/|_|  |_|\__,_(_)
                     |/

Framework-abhängige Bereitstellung

Für die .NET Core 2.1. SDK CLI ist die frameworkabhängige Bereitstellung (Framework-Dependent Deployment, FDD) der Standardmodus des Basisbefehls dotnet publish. In neueren SDKs ist Frameworkabhängige ausführbare Datei der Standard.

Wenn Sie Ihre App als frameworkabhängige Bereitstellung veröffentlichen, wird eine <PROJECT-NAME>.dll-Datei im ./bin/<BUILD-CONFIGURATION>/<TFM>/publish/-Ordner erstellt. Navigieren Sie zum Ausgabeordner, und verwenden Sie den Befehl dotnet <PROJECT-NAME>.dll, um Ihre App auszuführen.

Ihre App wird für eine bestimmte Version von .NET konfiguriert. Die .NET-Zielruntime ist auf jedem Computer erforderlich, auf dem Ihre App ausgeführt wird. Wenn Ihre App beispielsweise auf .NET Core 3.1 ausgerichtet ist, muss die .NET Core 3.1-Runtime auf Computern installiert sein, auf denen Ihre App ausgeführt werden soll. Sie können Ihre Projektdatei wie im Abschnitt Grundlagen der Veröffentlichung beschrieben bearbeiten, um das Standardzielframework zu ändern oder mehr als ein Zielframework einzurichten.

Beim Veröffentlichen einer frameworkabhängigen Bereitstellung wird eine App erstellt, die automatisch ein Rollforward auf den neuesten .NET-Sicherheitspatch ausführt, der auf dem System verfügbar ist. Weitere Informationen über die Versionsbindung zur Kompilierzeit finden Sie unter .NET-Versionsauswahl.

Veröffentlichungsmodus SDK-Version Get-Help
Framework-abhängige Bereitstellung 2.1 dotnet publish -c Release
3.1 dotnet publish -c Release -p:UseAppHost=false
5.0 dotnet publish -c Release -p:UseAppHost=false
6.0 dotnet publish -c Release -p:UseAppHost=false

Frameworkabhängige ausführbare Datei

Für die .NET 5 (und .NET Core 3.1) SDK CLI ist die frameworkabhängige ausführbare Datei (Framework-Dependent Executable, FDE) der Standardmodus des Basisbefehls dotnet publish. Sie müssen keine weiteren Parameter festlegen, wenn Sie das aktuelle Betriebssystem als Ziel verwenden möchten.

In diesem Modus wird ein Host für die plattformspezifische ausführbare Datei erstellt, der Ihre plattformübergreifende App hostet. Dieser Modus ähnelt der frameworkabhängigen Bereitstellung, da dabei ein Host in Form des dotnet-Befehls erforderlich ist. Der Dateiname des ausführbaren Hosts variiert je nach Plattform. Der Name sollte <PROJECT-FILE>.exe ähnlich sein. Sie können diese ausführbare Datei direkt ausführen, anstatt dotnet <PROJECT-FILE>.dll aufzurufen, was jedoch auch eine akzeptable Möglichkeit zum Ausführen der App darstellt.

Ihre App wird für eine bestimmte Version von .NET konfiguriert. Die .NET-Zielruntime ist auf jedem Computer erforderlich, auf dem Ihre App ausgeführt wird. Wenn Ihre App beispielsweise auf .NET Core 3.1 ausgerichtet ist, muss die .NET Core 3.1-Runtime auf Computern installiert sein, auf denen Ihre App ausgeführt werden soll. Sie können Ihre Projektdatei wie im Abschnitt Grundlagen der Veröffentlichung beschrieben bearbeiten, um das Standardzielframework zu ändern oder mehr als ein Zielframework einzurichten.

Beim Veröffentlichen einer frameworkabhängigen ausführbaren Datei wird eine App erstellt, die automatisch ein Rollforward auf den neuesten .NET-Sicherheitspatch ausführt, der auf dem System verfügbar ist. Weitere Informationen über die Versionsbindung zur Kompilierzeit finden Sie unter .NET-Versionsauswahl.

Für .NET 2.1 müssen Sie die folgenden Parameter mit dem dotnet publish-Befehl verwenden, um eine FDE zu veröffentlichen:

  • -r <RID> Dieser Switch verwendet einen Bezeichner (RID), um die Zielplattform anzugeben. Eine Liste der Runtimebezeichner (RID) finden Sie im RID-Katalog.

  • --self-contained false Dieser Parameter deaktiviert das Standardverhalten des -r-Parameters, also das Erstellen einer eigenständigen Bereitstellung (SCD, Self-Contained Deployment). Dieser Parameter erstellt eine Framework-abhängige ausführbare Datei (FDE).

Veröffentlichungsmodus SDK-Version Get-Help
Frameworkabhängige ausführbare Datei 3.1 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
5.0 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release
6.0 dotnet publish -c Release -r <RID> --self-contained false
dotnet publish -c Release

Wenn Sie den -r-Switch verwenden, wird der Pfad des Ausgabeordner in folgenden geändert: ./bin/<BUILD-CONFIGURATION>/<TFM>/<RID>/publish/

Führen Sie dotnet publish -f net6.0 -r win10-x64 --self-contained false aus, wenn Sie die Beispiel-App verwenden. Mit diesem Befehl wird die folgende ausführbare Datei erstellt: ./bin/Debug/net6.0/win10-x64/publish/apptest1.exe

Hinweis

Sie können die Gesamtgröße Ihrer Bereitstellung reduzieren, indem Sie den invarianten Globalisierungsmodus aktivieren. Dieser Modus eignet sich für Anwendungen, die nicht für den globalen Einsatz ausgelegt sind, und Formatierungskonventionen, Groß-/Kleinschreibungskonventionen, Zeichenfolgenvergleiche und Sortierreihenfolgen der invarianten Kultur verwenden können. Weitere Informationen zum invarianten Globalisierungsmodus und seiner Aktivierung finden Sie unter .NET Globalization Invariant Mode (Invarianter Globalisierungsmodus von .NET).

Eigenständige Bereitstellung

Wenn Sie eine eigenständige Bereitstellung veröffentlichen, erstellt das .NET SDK eine plattformspezifische ausführbare Datei. Beim Veröffentlichen einer eigenständigen Bereitstellung sind alle zum Ausführen der App erforderlichen .NET-Dateien enthalten, jedoch sind die nativen Abhängigkeiten von .NET nicht enthalten. Diese Abhängigkeiten müssen auf dem System vorhanden sein, bevor die App ausgeführt wird.

Beim Veröffentlichen einer eigenständigen Bereitstellung wird eine App erstellt, für die kein Rollforward auf den neuesten verfügbaren .NET-Sicherheitspatch ausgeführt wird. Weitere Informationen über die Versionsbindung zur Kompilierzeit finden Sie unter .NET-Versionsauswahl.

Sie müssen die folgenden Parameter mit dem dotnet publish-Befehl verwenden, um eine eigenständige Bereitstellung zu veröffentlichen:

  • -r <RID> Dieser Switch verwendet einen Bezeichner (RID), um die Zielplattform anzugeben. Eine Liste der Runtimebezeichner (RID) finden Sie im RID-Katalog.

  • --self-contained true: Dieser Switch weist das .NET Core SDK an, eine ausführbare Datei als eigenständige Bereitstellung zu erstellen.

Veröffentlichungsmodus SDK-Version Get-Help
Eigenständige Bereitstellung 2.1 dotnet publish -c Release -r <RID> --self-contained true
3.1 dotnet publish -c Release -r <RID> --self-contained true
5.0 dotnet publish -c Release -r <RID> --self-contained true
6.0 dotnet publish -c Release -r <RID> --self-contained true

Tipp

In .NET 6 können Sie die Gesamtgröße kompatibler eigenständiger Apps reduzieren, indem Sie gekürzte Veröffentlichungen veröffentlichen. Dadurch kann der Trimmer Teile des Frameworks und Assemblys entfernen, auf die verwiesen wird, die sich nicht in einem Codepfad befinden oder möglicherweise in der Laufzeitreflektion referenziert werden. Unter Trimmen von Inkompatibilitäten erfahren Sie, ob das Kürzen für Ihre Anwendung sinnvoll ist.

Hinweis

Sie können die Gesamtgröße Ihrer Bereitstellung reduzieren, indem Sie den invarianten Globalisierungsmodus aktivieren. Dieser Modus eignet sich für Anwendungen, die nicht für den globalen Einsatz ausgelegt sind, und Formatierungskonventionen, Groß-/Kleinschreibungskonventionen, Zeichenfolgenvergleiche und Sortierreihenfolgen der invarianten Kultur verwenden können. Weitere Informationen zum invarianten Globalisierungsmodus und seiner Aktivierung finden Sie unter .NET Core Globalization Invariant Mode (Invarianter Globalisierungsmodus von .NET Core).

Weitere Informationen