Dieser Beitrag erklärt das Microsoft .NET Development Utility (DNU).

Bei DNU handelt es sich um ein Commandline Werkzeug, das hilfreiche Funktionen für die Entwicklung zur Verfügung stellt.

Wie ich bereits zu DNX beschrieben habe, benötigt ein DNX-Projekt eine Datei project.json, welche das Projekt beschreibt und worin auch Abhängigkeiten beschrieben werden.

Neben DNU und DNX gibt es auch noch den .NET Version Manager DNVM.

Mit DNU können nun diese Abhängigkeiten (Pakete) verwaltet werden. Im Hintergrund arbeitet übrigens NuGet.

Um alle möglichen Befehle zu erhalten, muss DNU ohne Parameter oder mit dem Parameter -h ausgeführt werden:

.NET Deployment Utility

.NET Deployment Utility

Sehen wir uns das im Zuge eines Beispielprojektes an.

Für dieses Beispiel wird davon ausgegangen, dass yeoman und der ASP.NET Generator installiert sind (kann hier nachgelesen werden).

Via yo aspnet wird in einem beliebigen Verzeichnis eine ASP.NET application angelegt, nennen wir sie dnutest. Wechseln wir nach der Anlage in das neue Verzeichnis und sehen uns die Datei project.json an, sehen wir folgende Abhängigkeiten:

"dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.Sqlite": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Dnx.Runtime":"1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final"
  }

Damit wir sie verwenden können, müssen die jeweiligen Pakete noch bezogen werden. Hierzu rufen wir in der Commandline (im Verzeichnis in dem auch die project.json zu finden ist) den Befehl dnu restore auf.

Mit einem anschließenden dnu build wird das gesamte Projekt neu erstellt und kann mit dnx web gestartet werden.

Werden nun neue Abhängigkeiten in die project.json eingetragen, ist besagtes dnu restore aufzurufen.

Eine andere Möglichkeit, Abhängigkeiten hinzuzufügen ist die Installation von Paketen aus der Commandline:

dnu install newtonsoft.json

Damit wird Newtonsoft.Json installiert und automatisch der Datei project.json hinzugefügt.

Mit dnu wrap myproj.csproj kann aus der angegebenen Projekt-Datei ein project.json generiert werden und sieht dann so aus:

{
  "version": "1.0.0-*",
  "frameworks": {
    "net45": {
      "wrappedProject": "../../Sample/Sample.Tools.csproj",
      "bin": {
        "assembly": "../../Sample.Tools/obj/{configuration}/Sample.Tools",
        "pdb": "../../Sample.Tools/obj/{configuration}/Sample.Tools"
      }
    }
  }
}

Das kann nun in die ursprüngliche project.json übernommen werden. Der Vorteil: eigene Projekte/Bibliotheken können so eingebunden werden, ohne ein Package dafür generieren und bereitstellen zu müssen.

Für den Umgang mit Packages empfiehlt sich ein Blick auf die Parameter pack, packages und publish.

Über den Autor

Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler und Fotograf. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.