Allgemeine Übersicht über Änderungen in .NET Core-ToolsHigh-level overview of changes in the .NET Core tools

Dieses Dokument beschreibt die Änderungen im Zusammenhang mit dem Verschieben von project.json nach MSBuild und das Projektsystem csproj mit Informationen zu den Änderungen an den Schichten der .NET Core-Tools und die Implementierung der CLI-Befehle.This document describes the changes associated with moving from project.json to MSBuild and the csproj project system with information on the changes to the layering of the .NET Core tooling and the implementation of the CLI commands. Diese Änderungen sind mit der Version von .NET Core SDK 1.0 und Visual Studio 2017 am 7. März 2017 aufgetreten (weitere Informationen finden Sie in der Ankündigung), aber sie wurden zuerst mit der Version von .NET Core SDK Preview 3 implementiert.These changes occurred with the release of .NET Core SDK 1.0 and Visual Studio 2017 on March 7, 2017 (see the announcement) but were initially implemented with the release of the .NET Core SDK Preview 3.

Abkehr von „project.json“Moving away from project.json

Die größte Änderung in den Tools für .NET Core ist sicherlich die Abkehr von „project.json“ hin zu „csproj“ als Projektsystem.The biggest change in the tooling for .NET Core is certainly the move away from project.json to csproj as the project system. Die neuesten Versionen der Befehlszeilentools unterstützen keine project.json-Dateien.The latest versions of the command-line tools don't support project.json files. Das heißt, dass diese Version nicht zum Erstellen, Ausführen und Veröffentlichen von auf „project.json“ basierenden Anwendungen und Bibliotheken verwendet werden kann.That means that it cannot be used to build, run or publish project.json based applications and libraries. Um diese Version der Tools verwenden zu können, müssen Sie Ihre vorhandenen Projekte migrieren oder neue beginnen.In order to use this version of the tools, you will need to migrate your existing projects or start new ones.

Im Rahmen dieses Wechsels wurde das benutzerdefinierte Buildmodul, das zum Erstellen von „project.json“-Projekten entwickelt wurde, durch ein ausgereiftes und vollausgestattetes Buildmodul namens MSBuild ersetzt.As part of this move, the custom build engine that was developed to build project.json projects was replaced with a mature and fully capable build engine called MSBuild. MSBuild ist ein bekanntes Modul in der .NET-Community, da es seit der ersten Version der Plattform eine wichtige Technologie darstellt.MSBuild is a well-known engine in the .NET community, since it has been a key technology since the platform's first release. Da mit MSBuild .NET Core-Anwendungen erstellt werden müssen, wurde MSBuild zu .NET Core portiert und kann auf allen Plattformen genutzt werden, auf denen .NET Core ausgeführt wird.Of course, because it needs to build .NET Core applications, MSBuild has been ported to .NET Core and can be used on any platform that .NET Core runs on. Eines der wichtigsten Ziele von .NET Core ist ein plattformübergreifender Entwicklungsstapel, und wir haben dafür gesorgt, dass auch nach diesem Wechsel dieses Ziel erfüllt wird.One of the main promises of .NET Core is that of a cross-platform development stack, and we have made sure that this move does not break that promise.

Hinweis

Wenn Sie noch nicht mit MSBuild vertraut sind und mehr darüber erfahren möchten, lesen Sie zum Einstieg den Artikel MSBuild Concepts (MSBuild-Konzepte).If you are new to MSBuild and would like to learn more about it, you can start by reading the MSBuild Concepts article.

Die ToolschichtenThe tooling layers

Die Frage, die sich nach der Abkehr vom vorhandenen Projektsystem und aufgrund des Wechsels des Buildmoduls zwangsläufig stellt, ist, ob sich durch diese Änderungen die allgemeinen Schichten des gesamten Ökosystems von .NET Core-Tools ändern?With the move away from the existing project system as well as with building engine switches, the question that naturally follows is do any of these changes change the overall "layering" of the whole .NET Core tooling ecosystem? Gibt es neue Bits und Komponenten?Are there new bits and components?

Lassen Sie uns als schnelle Auffrischung mit den Schichten in Preview 2 beginnen, die die folgende Abbildung zeigt:Let's start with a quick refresher on Preview 2 layering as shown in the following picture:

Allgemeine Architektur der Preview 2-Tools

Die Schichtung der Tools ist recht einfach.The layering of the tools is quite simple. Ganz unten haben wir die .NET Core-Befehlszeilentools als Fundament.At the bottom we have the .NET Core Command Line tools as a foundation. Alle weiteren Tools auf höherer Ebene, z.B. Visual Studio oder Visual Studio Code, hängen zum Erstellen von Projekten, Wiederherstellen von Abhängigkeiten usw. von der CLI ab.All other, higher-level tools such as Visual Studio or Visual Studio Code, depend and rely on the CLI to build projects, restore dependencies and so on. Dies bedeutet, dass z. B. wenn Visual Studio einen Wiederherstellungsvorgang ausführen möchten, sie in aufrufen würde dotnet restore (Siehe Hinweis)-Befehl in der CLI.This meant that, for example, if Visual Studio wanted to perform a restore operation, it would call into dotnet restore (see note) command in the CLI.

Durch den Wechsel zum neuen Projektsystem ändert sich die vorherige Abbildung:With the move to the new project system, the previous diagram changes:

Grundlegende Architektur von .NET Core SDK 1.0.0

Der Hauptunterschied besteht darin, dass die CLI nicht mehr die Fundamentschicht darstellt. Diese Rolle wird jetzt von der „freigegebenen SDK-Komponente“ übernommen.The main difference is that the CLI is not the foundational layer anymore; this role is now filled by the "shared SDK component". Diese freigegebene SDK-Komponente ist eine Gruppe von Zielen und zugehörigen Aufgaben, die für das Kompilieren Ihres Codes, seine Veröffentlichung, das Packen von NuGet-Paketen usw. verantwortlich sind. Das SDK selbst ist Open Source und auf GitHub im Repository SDK verfügbar.This shared SDK component is a set of targets and associated tasks that are responsible for compiling your code, publishing it, packing NuGet packages etc. The SDK itself is open-source and is available on GitHub on the SDK repo.

Hinweis

Ein „Ziel“ ist ein MSBuild-Ausdruck, der einen benannten Vorgang angibt, den MSBuild aufrufen kann.A "target" is a MSBuild term that indicates a named operation that MSBuild can invoke. Es ist in der Regel an eine oder mehrere Aufgaben gekoppelt, die dem Ziel entsprechende Logik ausführen.It is usually coupled with one or more tasks that execute some logic that the target is supposed to do. MSBuild unterstützt viele vorgefertigte Ziele, z.B. Copy oder Execute. Außerdem können Benutzer mithilfe von verwaltetem Code eigene Aufgaben schreiben und Ziele definieren, um diese Aufgaben ausführen.MSBuild supports many ready-made targets such as Copy or Execute; it also allows users to write their own tasks using managed code and define targets to execute those tasks. Weitere Informationen finden Sie unter MSBuild-Aufgaben.For more information, see MSBuild tasks.

Alle Toolsets nutzen nun die freigegebene SDK-Komponente und ihre Ziele. Das gibt auch für die CLI.All the toolsets now consume the shared SDK component and its targets, CLI included. Beispielsweise ruft die nächste Version von Visual Studio nicht in dotnet restore (Siehe Hinweis)-Befehl, um die Abhängigkeiten für Projekte von .NET Core wiederherzustellen, verwenden sie das Ziel "Restore" direkt.For example, the next version of Visual Studio will not call into dotnet restore (see note) command to restore dependencies for .NET Core projects, it will use the "Restore" target directly. Da es sich MSBuild-Ziele handelt, können Sie MSBuild auch „roh“ verwenden, um sie mit dem Befehl dotnet msbuild auszuführen.Since these are MSBuild targets, you can also use raw MSBuild to execute them using the dotnet msbuild command.

CLI-BefehleCLI commands

Die freigegebene SDK-Komponente bedeutet, dass die meisten vorhandenen CLI-Befehle als MSBuild-Aufgaben und -Ziele neu implementiert wurden.The shared SDK component means that the majority of existing CLI commands have been re-implemented as MSBuild tasks and targets. Was bedeutet dies für die CLI-Befehle und Ihre Nutzung des Toolsets?What does this mean for the CLI commands and your usage of the toolset?

Aus Benutzersicht ändert sich nicht die Art der Verwendung der CLI.From an usage perspective, it doesn't change the way you use the CLI. Die CLI weist noch immer die Hauptbefehle auf, die in der Preview 2-Version vorhanden sind:The CLI still has the core commands that exist in Preview 2 release:

  • new
  • restore
  • run
  • build
  • publish
  • test
  • pack

Diese Befehle werden weiter wie erwartet ausgeführt (Erstellen, Veröffentlichen, Packen eines Projekts usw.).These commands still do what you expect them to do (new up a project, build it, publish it, pack it and so on). Die meisten Optionen haben sich nicht geändert und sind weiterhin vorhanden. Um sich mit den Änderungen vertraut zu machen, können Sie entweder die Hilfebildschirme der Befehle (über dotnet <command> --help) oder die Dokumentation auf dieser Website konsultieren.Majority of the options are not changed, and are still there, and you can consult either the commands' help screens (using dotnet <command> --help) or documentation on this site to get familiar with any changes.

Aus Sicht der Ausführung verwenden die CLI-Befehle ihre Parameter und erstellen einen Aufruf an „rohes“ MSBuild, woraufhin das Modul die benötigten Eigenschaften festlegt und das gewünschte Ziel ausführt.From an execution perspective, the CLI commands will take their parameters and construct a call to "raw" MSBuild that will set the needed properties and run the desired target. Um dies besser zu veranschaulichen, betrachten Sie den folgenden Befehl:To better illustrate this, consider the following command:

dotnet publish -o pub -c Release

Mit diesem Befehl wird eine Anwendung im Ordner pub mithilfe der Konfiguration „Release“ veröffentlicht.This command is publishing an application into a pub folder using the "Release" configuration. Intern wird dieser Befehl in den folgenden MSBuild-Aufruf übersetzt:Internally, this command gets translated into the following MSBuild invocation:

dotnet msbuild /t:Publish /p:OutputPath=pub /p:Configuration=Release

Die wichtige Ausnahme dieser Regel sind die Befehle new und run, da sie nicht als MSBuild-Ziele implementiert wurden.The notable exception to this rule are new and run commands, as they have not been implemented as MSBuild targets.

> [!NOTE] > Starting with .NET Core 2.0, you don't have to run dotnet restore because it's run implicitly by all commands, such as dotnet build and dotnet run, that require a restore to occur. 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.> [!NOTE] > Starting with .NET Core 2.0, you don't have to run dotnet restore because it's run implicitly by all commands, such as dotnet build and dotnet run, that require a restore to occur. 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.