Dotnet CLI Tools
Ein Grund der Verzögerung von .NET Core (ein ursprünglicher Plan für den Release war Q1 2016) sind die dotnet Tools. Die dotnet Tools ersetzen die komplexeren DNX Tools with dnu, dnvm, und dnx. Die dotnet CLI Tools machen vieles einfacher – man braucht sich nur noch ein Programm zu merken, und erweiterbar ist das auch. Damit warte ich gern etwas länger auf den Release.
Installation
Installiert werden die dotnet Tools über MSI, Debian, oder OSX Packages, oder via ZIP oder tar File: https://github.com/dotnet/cli. Distributions gibt es neben Windows schon für Ubuntu 14.04, Mac OSX und CentOS 7.1.
Erstellen eines Hello, World! Programmes
Es war noch nie so simple ein Hello, World! Programm zu erstellen.
Der Command
dotnet new
reicht.
Dieser Command erstellt den Code für eine Console-Anwendung mit project.json, Program.cs, und NuGet.Config. Zukünftig können auch andere Projekttypen mit dotnet new erstellt werden, z.B. Web Projekte, Libraries, oder auch Test-Projekte. Dazu dient dann die Option –type (oder -t).
Für andere Sprachen (neben C# geht es auch schon mit F#) dient die Option –lang (oder -l), z.B.
dotnet new --lang F#
für ein Hello, World! mit F#.
Das generierte C# File Program.cs enthält tatsächlich ein simples Hello, World!:
using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
Interessanter ist das generierte project.json File:
{ "version": "1.0.0-*", "compilationOptions": { "emitEntryPoint": true }, "dependencies": { "NETStandard.Library": "1.0.0-rc2-23901" }, "frameworks": { "netstandardapp1.5": { "imports": "dnxcore50" } } }
Das emitEntryPoint setting besagt das es einen Entry Point in das Programm gibt, eine Main Methode. Bei Libraries ist dieses Setting nicht notwendig, sehr wohl aber jetzt auch bei Web Applikationen mit ASP.NET Core 1.0.
Unter frameworks findet sich das Framewrok netstandardapp1.5. Das ist der neue Moniker für .NET Core Applikationen, ein Executable für .NET Core 1.0. Nachdem viele NuGet Packages diesen neuen Moniker noch nicht kennen, gibt es ein import von dnxcore50. Das war der Moniker zu Zeiten als .NET Core noch 5.0 war. Irgendwann wird dieses Import nicht mehr notwendig sein.
Unter dependencies finden sich die NuGet Packages die für das Kompilieren des Programmes notwendig sind. Nachdem die Einheiten von .NET Core jetzt viel kleiner sind, um es uns zu ersparen jedes NuGet Package hier aufzuzählen, wird das Reference Package NETStandard.Library hier eingetragen. Das ist praktisch eine Liste einer Vielzahl von Packages. Je nach Version unterscheidet sich diese Liste – und damit auch die Unterstützung von verschiedenen .NET Versionen.
Um die Hello, World! Applikation auch für .NET 4.6 zu kompilieren, kann net4.6 bei den frameworks eingetragen werden:
"frameworks": { "net46": { }, "netstandardapp1.5": { "imports": "dnxcore50" } }
Laden der NuGet Packages
Der nächste dotnet Command der erforderlich ist, ist das Laden der NuGet Packages. Das passiert mit Hilfe von dotnet restore. Die Packages werden auf den NuGet Servern die in NuGet.Config angegeben sind gesucht und heruntergeladen. Den Command das erste mal abzusetzen kann schon dauern. Danach werden die Packages aber im User Profil gespeichert unter %UserProfile%/.nuget gespeichert, und damit sind weitere Aufrufe (auch von anderen Projekten) schneller.
dotnet restore
Kompilieren des Programmes
Kompiliert wird das Programm mit dotnet build.
dotnet build
Mit entsprechenden Optionen kann die Architektur für das Binary (–arch oder -a, momentan nur x64), das Framework (–framework oder -f), die Konfiguration (–configuration oder -c, z.B. release/debug), und anderes gewählt werden.
Native Code
Auch native Code lässt sich schon kompilieren:
dotnet build --native
Unter Windows dazu das VS2015 x64 Native Tools Command Prompt von Visual Studio verwenden, dann funktioniert das auch.
Weitere Optionen
Für Unit testing (dotnet test), und Entity Framework Core migrations (dotnet ef) werden auch weitere Features bei den dotnet Tools integriert.
Weitere Informationen dazu in meinem neuen Buch Professional C# 6 and .NET Core 1.0, oder in meinen .NET Core Workshops.
Have Fun!
Christian