Bereitstellen von .NET Core-Apps mit CLI-Tools (command-line interface, Befehlszeilenschnittstelle)Deploying .NET Core apps with command-line interface (CLI) tools

Sie können eine .NET Core-Anwendung entweder als Framework-abhängige Bereitstellung bereitstellen, was die Binärdateien Ihrer Anwendung einschließt, jedoch von Präsenz von .NET Core auf dem Zielsystem abhängt, oder als eigenständige Bereitstellung,die jeweils Ihre Anwendung sowie die .NET Core-Binärdateien einschließt.You can deploy a .NET Core application either as a framework-dependent deployment, which includes your application binaries but depends on the presence of .NET Core on the target system, or as a self-contained deployment, which includes both your application and the .NET Core binaries. Eine Übersicht finden Sie unter .NET Core-Anwendungsbereitstellung.For an overview, see .NET Core Application Deployment.

Die folgenden Abschnitte zeigen, wie Sie .NET Core-CLI-Tools zum Erstellen der folgenden Bereitstellungen verwenden:The following sections show how to use .NET Core command-line interface tools to create the following kinds of deployments:

  • Framework-abhängige BereitstellungFramework-dependent deployment
  • Framework-abhängige Bereitstellung mit DrittanbieterabhängigkeitenFramework-dependent deployment with third-party dependencies
  • Eigenständige BereitstellungSelf-contained deployment
  • Eigenständige Bereitstellung mit DrittanbieterabhängigkeitenSelf-contained deployment with third-party dependencies

Wenn Sie über die Befehlszeile arbeiten, können Sie einen Programm-Editor Ihrer Wahl verwenden.When working from the command line, you can use a program editor of your choice. Wenn Ihr Programm-Editor Visual Studio Code ist, können Sie eine Befehlskonsole in Ihrer Visual Studio Code-Umgebung öffnen, indem Sie Ansicht > Integrierter Terminal auswählen.If your program editor is Visual Studio Code, you can open a command console inside your Visual Studio Code environment by selecting View > Integrated Terminal.

Framework-abhängige BereitstellungFramework-dependent deployment

Die Bereitstellung einer Framework-abhängigen Bereitstellung ohne Drittanbieter-Abhängigkeiten umfasst nur das Erstellen, Testen und Veröffentlichen der Anwendung.Deploying a framework-dependent deployment with no third-party dependencies simply involves building, testing, and publishing the app. Ein einfaches, in C# geschriebenes Beispiel veranschaulicht den Prozess.A simple example written in C# illustrates the process.

  1. Erstellen Sie ein Projektverzeichnis.Create a project directory.

    Erstellen Sie ein Verzeichnis für Ihr Projekt, und machen Sie es zu Ihrem aktuellen Verzeichnis.Create a directory for your project and make it your current directory.

  2. Erstellen eines ProjektsCreate the project.

    Geben Sie über die Befehlszeile dotnet new console ein, um ein neues C#-Konsolenprojekt in diesem Verzeichnis zu erstellen.From the command line, type dotnet new console to create a new C# console project in that directory.

  3. Überprüfen Sie den Quellcode der Anwendung.Add the application's source code.

    Öffnen Sie die Program.cs-Datei in Ihrem Editor, und ersetzen Sie den automatisch generierten Code durch den folgenden Code.Open the Program.cs file in your editor and replace the auto-generated code with the following code. Der Benutzer wird zur Texteingabe aufgefordert, und die einzelnen Wörter, die vom Benutzer eingegeben wurden, werden angezeigt.It prompts the user to enter text and displays the individual words entered by the user. Der reguläre Ausdruck \w+ wird verwendet, um Wörter im Eingabetext zu trennen.It uses the regular expression \w+ to separate the words in the input text.

    using System;
    using System.Text.RegularExpressions;
    
    namespace Applications.ConsoleApps
    {
        public class ConsoleParser
        {
            public static void Main()
            {
                Console.WriteLine("Enter any text, followed by <Enter>:\n");
                String s = Console.ReadLine();
                ShowWords(s);
                Console.Write("\nPress any key to continue... ");
                Console.ReadKey();
            }
    
            private static void ShowWords(String s)
            {
                String pattern = @"\w+";
                var matches = Regex.Matches(s, pattern);
                if (matches.Count == 0)
                {
                    Console.WriteLine("\nNo words were identified in your input.");
                }
                else
                {
                    Console.WriteLine($"\nThere are {matches.Count} words in your string:");
                    for (int ctr = 0; ctr < matches.Count; ctr++)
                    {
                        Console.WriteLine($"   #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}");
                    }
                }
            }
        }
    }
    
    
  4. Aktualisieren Sie die Abhängigkeiten und Tools des Projekts.Update the project's dependencies and tools.

    Führen Sie den Befehl dotnet restore aus (siehe Hinweis), um die im Projekt angegebenen Abhängigkeiten wiederherzustellen.Run the dotnet restore (see note) command to restore the dependencies specified in your project.

  5. Erstellen Sie ein Debugbuild Ihrer App.Create a Debug build of your app.

    Verwenden Sie den Befehl dotnet build, um Ihre Anwendung zu erstellen, oder den Befehl dotnet run, um sie zu erstellen und auszuführen.Use the dotnet build command to build your application or the dotnet run command to build and run it.

  6. Stellen Sie Ihre App bereit.Deploy your app.

    Nachdem Sie das Programm debuggt und getestet haben, erstellen Sie die Bereitstellung, indem Sie folgenden Befehl verwenden:After you've debugged and tested the program, create the deployment by using the following command:

    dotnet publish -f netcoreapp1.1 -c Release
    

    Dies erstellt eine Releaseversion (anstatt einer Debugversion) Ihrer Anwendung.This creates a Release (rather than a Debug) version of your app. Die resultierenden Dateien werden in ein Verzeichnis namens publish platziert, das sich in einem Unterverzeichnis des bin-Verzeichnisses Ihres Projekts befindet.The resulting files are placed in a directory named publish that's in a subdirectory of your project's bin directory.

    Der Veröffentlichungsprozess gibt zusammen mit den Dateien Ihrer Anwendung eine Programmdatenbankdatei (.pdb) aus, die Debuginformationen über Ihre Anwendung enthält.Along with your application's files, the publishing process emits a program database (.pdb) file that contains debugging information about your app. Die Datei ist vornehmlich für das Debuggen von Ausnahmen nützlich.The file is useful primarily for debugging exceptions. Sie können sich auch dazu entschließen, sie nicht mit den Dateien Ihrer Anwendung zu verteilen.You can choose not to distribute it with your application's files. Jedoch sollten Sie sie für den Fall speichern, dass Sie das Releasebuild Ihrer App debuggen möchten.You should, however, save it in the event that you want to debug the Release build of your app.

    Der vollständige Satz von Anwendungsdateien kann so bereitgestellt werden, wie Sie möchten.You can deploy the complete set of application files in any way you like. Sie können sie z.B. in einer ZIP-Datei verpacken, und einen einfachen copy-Befehl verwenden, oder sie mit jedem Installationspaket Ihrer Wahl bereitstellen.For example, you can package them in a Zip file, use a simple copy command, or deploy them with any installation package of your choice.

  7. Ausführen der AppRun your app

    Sobald die Anwendung installiert ist, können Benutzer sie mithilfe des dotnet-Befehls ausführen und den Dateinamen der Anwendung bereitstellen, z.B. dotnet fdd.dll.Once installed, users can execute your application by using the dotnet command and providing the application filename, such as dotnet fdd.dll.

    Das Installationsprogramm sollte zusätzlich zu den Binärdateien der Anwendung das freigegebene Framework-Installationsprogramm bündeln, oder als erforderliche Komponente im Rahmen der Anwendungsinstallation überprüfen.In addition to the application binaries, your installer should also either bundle the shared framework installer or check for it as a prerequisite as part of the application installation. Die Installation des gemeinsam genutzten Frameworks erfordert Administrator-/Root-Zugriff.Installation of the shared framework requires Administrator/root access.

Framework-abhängige Bereitstellung mit DrittanbieterabhängigkeitenFramework-dependent deployment with third-party dependencies

Die Bereitstellung einer Framework-abhängigen Bereitstellung mit mindestens einer Drittanbieterabhängigkeit erfordert, dass diese Abhängigkeiten für Ihr Projekt verfügbar sind.Deploying a framework-dependent deployment with one or more third-party dependencies requires that those dependencies be available to your project. Es sind noch zwei zusätzliche Schritte nötig, bevor Sie den dotnet restore-Befehl ausführen können (siehe Hinweis):Two additional steps are required before you can run the dotnet restore (see note) command:

  1. Fügen Sie Verweise auf Drittanbieter-Bibliotheken zum <ItemGroup>-Teil Ihrer CSPROJ-Datei hinzu.Add references to required third-party libraries to the <ItemGroup> section of your csproj file. Der folgende <ItemGroup>-Abschnitt verwendet Json.NET als Drittanbieter-Bibliothek:The following <ItemGroup> section contains a dependency on Json.NET as a third-party library:

    <ItemGroup>
      <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
    </ItemGroup>
    
  2. Wenn noch nicht geschehen, laden Sie das NuGet-Paket mit der Drittanbieter-Abhängigkeit herunter.If you haven't already, download the NuGet package containing the third-party dependency. Führen Sie den dotnet restore-Befehl (siehe Hinweis) nach dem Hinzufügen der Abhängigkeit aus, um das Paket herunterzuladen.To download the package, execute the dotnet restore (see note) command after adding the dependency. Da die Abhängigkeit zum Zeitpunkt der Veröffentlichung aus dem lokalen NuGet-Cache aufgelöst wurde, muss sie auf Ihrem System verfügbar sein.Because the dependency is resolved out of the local NuGet cache at publish time, it must be available on your system.

Beachten Sie, dass eine Framework-abhängige Bereitstellung mit Drittanbieter-Abhängigkeiten nur so tragbar wie ihre Drittanbieter-Abhängigkeiten ist.Note that a framework-dependent deployment with third-party dependencies is only as portable as its third-party dependencies. Falls eine Drittanbieter-Bibliothek nur macOS unterstützen sollte, so wird die Anwendung nicht auf Windows-Systeme übertragbar sein.For example, if a third-party library only supports macOS, the app isn't portable to Windows systems. Dies kann geschehen, wenn die Drittanbieter-Abhängigkeit selbst vom nativen Code abhängt.This happens if the third-party dependency itself depends on native code. Ein gutes Beispiel dafür ist der Kestrel-Server, der eine native Abhängigkeit unter libuv erfordert.A good example of this is Kestrel server, which requires a native dependency on libuv. Wenn bei dieser Art von Drittanbieter-Abhängigkeit eine FDD für eine Anwendung erstellt wird, enthält die veröffentlichte Ausgabe einen Ordner für jede Runtime-ID (RID), die die native Abhängigkeit unterstützt (und im NuGet-Paket vorhanden ist).When an FDD is created for an application with this kind of third-party dependency, the published output contains a folder for each Runtime Identifier (RID) that the native dependency supports (and that exists in its NuGet package).

Eigenständige Bereitstellung ohne DrittanbieterabhängigkeitenSelf-contained deployment without third-party dependencies

Das Bereitstellen einer eigenständigen Bereitstellung ohne Abhängigkeiten von Drittanbietern umfasst das Erstellen des Projekts, das Ändern der CSPROJ-Datei sowie das Erstellen, Testen und Veröffentlichen der Anwendung.Deploying a self-contained deployment without third-party dependencies involves creating the project, modifying the csproj file, building, testing, and publishing the app. Ein einfaches, in C# geschriebenes Beispiel veranschaulicht den Prozess.A simple example written in C# illustrates the process. Dieses Beispiel zeigt, wie Sie eine eigenständige Bereitstellung mithilfe des dotnet-Hilfsprogramms aus der Befehlszeile erstellen.The example shows how to create a self-contained deployment using the dotnet utility from the command line.

  1. Erstellen Sie ein Verzeichnis für das Projekt.Create a directory for the project.

    Erstellen Sie ein Verzeichnis für Ihr Projekt, und machen Sie es zu Ihrem aktuellen Verzeichnis.Create a directory for your project, and make it your current directory.

  2. Erstellen eines ProjektsCreate the project.

    Geben Sie über die Befehlszeile dotnet new console ein, um ein neues C#-Konsolenprojekt in diesem Verzeichnis zu erstellen.From the command line, type dotnet new console to create a new C# console project in that directory.

  3. Überprüfen Sie den Quellcode der Anwendung.Add the application's source code.

    Öffnen Sie die Program.cs-Datei in Ihrem Editor, und ersetzen Sie den automatisch generierten Code durch den folgenden Code.Open the Program.cs file in your editor and replace the auto-generated code with the following code. Der Benutzer wird zur Texteingabe aufgefordert, und die einzelnen Wörter, die vom Benutzer eingegeben wurden, werden angezeigt.It prompts the user to enter text and displays the individual words entered by the user. Der reguläre Ausdruck \w+ wird verwendet, um Wörter im Eingabetext zu trennen.It uses the regular expression \w+ to separate the words in the input text.

    using System;
    using System.Text.RegularExpressions;
    
    namespace Applications.ConsoleApps
    {
        public class ConsoleParser
        {
            public static void Main()
            {
                Console.WriteLine("Enter any text, followed by <Enter>:\n");
                String s = Console.ReadLine();
                ShowWords(s);
                Console.Write("\nPress any key to continue... ");
                Console.ReadKey();
            }
    
            private static void ShowWords(String s)
            {
                String pattern = @"\w+";
                var matches = Regex.Matches(s, pattern);
                if (matches.Count == 0)
                {
                    Console.WriteLine("\nNo words were identified in your input.");
                }
                else
                {
                    Console.WriteLine($"\nThere are {matches.Count} words in your string:");
                    for (int ctr = 0; ctr < matches.Count; ctr++)
                    {
                        Console.WriteLine($"   #{ctr,2}: '{matches[ctr].Value}' at position {matches[ctr].Index}");
                    }
                }
            }
        }
    }
    
    
  4. Definieren Sie die Zielplattformen für Ihre App.Define the platforms that your app will target.

    Erstellen Sie das Tag <RuntimeIdentifiers> im Abschnitt <PropertyGroup> Ihrer Datei CSPROJ, der die Plattformen Ihrer Anwendungsziele definiert und die Runtime-ID für jede Zielplattform angibt.Create a <RuntimeIdentifiers> tag in the <PropertyGroup> section of your csproj file that defines the platforms your app targets and specify the runtime identifier (RID) for each platform that you target. Beachten Sie, dass Sie auch ein Semikolon hinzufügen müssen, um die RIDs trennen.Note that you also need to add a semicolon to separate the RIDs. Sie finden eine RID-Liste im RID-Katalog.See Runtime IDentifier catalog for a list of runtime identifiers.

    Der folgende Abschnitt <PropertyGroup> gibt z.B. an, dass die Anwendung unter den Betriebssystemen Windows 10 (64-Bit) und OS X 10.11 (64-Bit) ausgeführt wird.For example, the following <PropertyGroup> section indicates that the app runs on 64-bit Windows 10 operating systems and the 64-bit OS X Version 10.11 operating system.

    <PropertyGroup>
        <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
    </PropertyGroup>
    

    Beachten Sie, dass das Element <RuntimeIdentifiers> in jeder <PropertyGroup> in Ihrer CSPROJ-Datei erscheinen kann.Note that the <RuntimeIdentifiers> element can appear in any <PropertyGroup> in your csproj file. Eine vollständige CSPROJ-Beispieldatei wird später in diesem Abschnitt angezeigt.A complete sample csproj file appears later in this section.

  5. Aktualisieren Sie die Abhängigkeiten und Tools des Projekts.Update the project's dependencies and tools.

    Führen Sie den Befehl dotnet restore aus (siehe Hinweis), um die im Projekt angegebenen Abhängigkeiten wiederherzustellen.Run the dotnet restore (see note) command to restore the dependencies specified in your project.

  6. Erstellen Sie ein Debugbuild Ihrer App.Create a Debug build of your app.

    Verwenden Sie den Befehl dotnet build aus der Befehlszeile.From the command line, use the dotnet build command.

  7. Nachdem Sie das Programm debuggt und getestet haben, erstellen Sie die Dateien, die mit Ihrer App für jede Zielplattform bereitgestellt werden sollen.After you've debugged and tested the program, create the files to be deployed with your app for each platform that it targets.

    Verwenden Sie den dotnet publish-Befehl für beide Zielplattformen wie folgt:Use the dotnet publish command for both target platforms as follows:

    dotnet publish -c Release -r win10-x64
    dotnet publish -c Release -r osx.10.11-x64
    

    Dies erstellt eine Releaseversion (anstatt einer Debugversion) Ihrer Anwendung für jede Zielplattform.This creates a Release (rather than a Debug) version of your app for each target platform. Die resultierenden Dateien werden in ein Unterverzeichnis namens publish platziert, das sich in einem Unterverzeichnis des \bin\Release\netcoreapp1.1<runtime_identifier>-Unterverzeichnis Ihres Projekts befindet.The resulting files are placed in a subdirectory named publish that's in a subdirectory of your project's .\bin\Release\netcoreapp1.1<runtime_identifier> subdirectory. Beachten Sie, dass jedes Unterverzeichnis den vollständigen Dateisatz enthält (Dateien Ihrer Anwendung und alle .NET Core-Dateien), der zum Starten Ihrer Anwendung erforderlich ist.Note that each subdirectory contains the complete set of files (both your app files and all .NET Core files) needed to launch your app.

Der Veröffentlichungsprozess gibt zusammen mit den Dateien Ihrer Anwendung eine Programmdatenbankdatei (.pdb) aus, die Debuginformationen über Ihre Anwendung enthält.Along with your application's files, the publishing process emits a program database (.pdb) file that contains debugging information about your app. Die Datei ist vornehmlich für das Debuggen von Ausnahmen nützlich.The file is useful primarily for debugging exceptions. Sie können sich auch dazu entschließen, sie nicht mit den Dateien Ihrer Anwendung zu packen.You can choose not to package it with your application's files. Jedoch sollten Sie sie für den Fall speichern, dass Sie das Releasebuild Ihrer App debuggen möchten.You should, however, save it in the event that you want to debug the Release build of your app.

Stellen Sie die veröffentlichen Dateien in einer beliebigen Weise bereit.Deploy the published files in any way you like. Sie können sie z.B. in einer ZIP-Datei verpacken, und einen einfachen copy-Befehl verwenden, oder sie mit jedem Installationspaket Ihrer Wahl bereitstellen.For example, you can package them in a Zip file, use a simple copy command, or deploy them with any installation package of your choice.

Es folgt die vollständige CSPROJ-Datei dieses Projekts:The following is the complete csproj file for this project.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
</Project>

Eigenständige Bereitstellung mit DrittanbieterabhängigkeitenSelf-contained deployment with third-party dependencies

Das Bereitstellen einer eigenständigen Bereitstellung mit einer oder mehreren Drittanbieter-Abhängigkeiten umfasst das Hinzufügen der Drittanbieter-Abhängigkeit:Deploying a self-contained deployment with one or more third-party dependencies involves adding the dependencies. Es sind noch zwei zusätzliche Schritte nötig, bevor Sie den dotnet restore-Befehl ausführen können (siehe Hinweis):Two additional steps are required before you can run the dotnet restore (see note) command:

  1. Fügen Sie Verweise auf Drittanbieter-Bibliotheken zum <ItemGroup>-Teil Ihrer CSPROJ-Datei hinzu.Add references to any third-party libraries to the <ItemGroup> section of your csproj file. Der folgende <ItemGroup>-Abschnitt verwendet Json.NET als Drittanbieter-Bibliothek.The following <ItemGroup> section uses Json.NET as a third-party library.

      <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
      </ItemGroup>
    
  2. Wenn noch nicht geschehen, laden Sie das NuGet-Paket mit der Drittanbieter-Abhängigkeit auf Ihr System herunter.If you haven't already, download the NuGet package containing the third-party dependency to your system. Führen Sie nach dem Hinzufügen der Abhängigkeit den dotnet restore-Befehl aus (siehe Hinweis), um die Abhängigkeit für Ihre App zur Verfügung zu stellen.To make the dependency available to your app, execute the dotnet restore (see note) command after adding the dependency. Da die Abhängigkeit zum Zeitpunkt der Veröffentlichung aus dem lokalen NuGet-Cache aufgelöst wurde, muss sie auf Ihrem System verfügbar sein.Because the dependency is resolved out of the local NuGet cache at publish time, it must be available on your system.

Es folgt die vollständige CSPROJ-Datei dieses Projekts:The following is the complete csproj file for this project:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
  </ItemGroup>
</Project>

Wenn Sie Ihre Anwendung bereitstellen, sind die Drittanbieter-Abhängigkeiten, die in Ihrer Anwendung verwendet werden, auch in Ihren Anwendungsdateien enthalten.When you deploy your application, any third-party dependencies used in your app are also contained with your application files. Drittanbieter-Bibliotheken müssen nicht auf dem System vorhanden sein, auf dem die Anwendung ausgeführt wird.Third-party libraries aren't required on the system on which the app is running.

Beachten Sie, dass Sie eine eigenständige Bereitstellung mit einer Drittanbieter-Bibliothek nur auf von dieser Bibliothek unterstützten Plattformen bereitstellen können.Note that you can only deploy a self-contained deployment with a third-party library to platforms supported by that library. Dies ist ähnlich, als wenn Sie über Drittanbieter-Abhängigkeiten mit nativen Abhängigkeiten in einer Framework-abhängigen Bereitstellung verfügen, wobei die nativen Abhängigkeiten mit der Plattform kompatibel sein müssen, auf der die App bereitgestellt wird.This is similar to having third-party dependencies with native dependencies in a framework-dependent deployment, where the native dependencies must be compatible with the platform to which the app is deployed.

Hinweis

Ab .NET Core 2.0 müssen Sie dotnet restore nicht mehr ausführen, da der Befehl implizit von allen Befehlen, z.B. dotnet new, dotnet build und dotnet run, ausgeführt wird, die eine Wiederherstellung erfordern.Starting with .NET Core 2.0, you don't have to run dotnet restore because it's run implicitly by all commands that require a restore to occur, such as dotnet new, dotnet build and dotnet run. In bestimmten Fällen eignet sich der Befehl dennoch. Dies ist etwa bei Szenarios der Fall, in denen das Ausführen einer expliziten Wiederherstellung sinnvoll ist. Beispiele hierfür sind Continuous Integration-Builds in Visual Studio Team Services oder Buildsystemen, die den Zeitpunkt für die Wiederherstellung explizit festlegen müssen.It's still a valid command in certain scenarios where doing an explicit restore makes sense, such as continuous integration builds in Visual Studio Team Services or in build systems that need to explicitly control the time at which the restore occurs.

Siehe auchSee also

.NET Core Anwendungsbereitstellung .NET Core Application Deployment
.NET Core Runtime-ID (RID)-Katalog.NET Core Runtime IDentifier (RID) catalog