ASP.NET 5

Vorstellung von ASP.NET 5 Preview

Daniel Roth

ASP.NET war im Lieferumfang von Microsoft .NET Framework 1.0 enthalten. Dieses Produkt wurde im Jahr 2002 zusammen mit Visual Studio 2002 veröffentlicht. Es war eine Weiterentwicklung von Active Server Pages (ASP) und enthielt objektorientierte Entwurfsmöglichkeiten, die .NET-Basisklassenbibliotheken (Base Class Libraries, BCLs), optimierte Leistung und viele weitere Funktionen. ASP.NET wurde dafür konzipiert, Entwicklern, die mit dem Schreiben von Desktopanwendungen vertraut sind, das Erstellen von Webanwendungen mit ASP.NET Web Forms zu erleichtern. Mit der Entwicklung des Webs wurden ASP.NET neue Frameworks hinzugefügt: MVC im Jahr 2008, Web Pages im Jahr 2010 und die Web-API und SignalR im Jahr 2012. Jedes dieser neuen Frameworks nutzt als Grundlage ASP.NET 1.0.

Mit ASP.NET 5 erreicht ASP.NET eine neue Dimension – analog dazu, wie ASP als ASP.NET im Jahr 2002 novelliert wurde. Diese Weiterentwicklung bringt zahlreiche neue Funktionen mit sich:

  • Vollständige parallele Unterstützung: ASP.NET 5-Anwendungen können nun auf einem Computer installiert werden, ohne dass sich dies auf andere Anwendungen auf dem Computer auswirkt.
  • Plattformübergreifende Unterstützung: ASP.NET 5 kann unter Windows, Mac und Linux ausgeführt werden und wird von diesen Betriebssystemen unterstützt.
  • Bereit für die Cloud: Funktionen wie etwa Diagnose, Sitzungszustand, Cache und Konfiguration funktionieren lokal und in der Cloud.
  • Schnellere Entwicklung: Der Buildschritt wurde entfernt. Speichern Sie einfach die Quelldateien, und aktualisieren Sie den Browser. Die Kompilierung erfolgt dann automatisch.
  • MVC, Web Pages und Web-API: Diese Komponenten werden zusammengeführt. Die Anzahl der Konzepte wird auf diese Weise vereinfacht.
  • Flexibles Hosting: Sie können nun Ihre gesamte ASP.NET 5-Anwendung unter IIS oder in Ihrem eigenen Prozess hosten.

Erste Schritte mit ASP.NET 5 Preview

In diesem Artikel stelle ich die Funktionen im Überblick vor, die das ASP.NET-Entwicklungsteam – dem ich angehöre – für ASP.NET 5 und Visual Studio 2015 Preview erstellt hat. Allgemeine Unterstützung beim Erstellen und Ausführen von ASP.NET 5-Anwendungen finden Sie unter asp.net/vNext. Dort erhalten Sie schrittweise Anleitungen sowie zusätzliche Dokumentation. Außerdem veröffentlichen wir regelmäßig Updates unter blogs.msdn.com/b/webdev. Laden Sie als ersten Schritt Visual Studio 2015 Preview herunter, und installieren Sie die Anwendung.

Das ASP.NET 5-Laufzeitmodul im Überblick

ASP.NET 5 wurde von Grund auf überarbeitet, um das Erstellen moderner Webanwendungen und -dienste zu unterstützen. ASP.NET 5 ist eine plattformübergreifende Open Source-Anwendung, die lokal und in der Cloud verwendet werden kann. ASP.NET 5 liegt zurzeit als Preview vor und wird aktiv unter GitHub (github.com/aspnet) entwickelt. Ich stelle die Neuerungen in ASP.NET 5 Preview im Überblick vor und verweise außerdem auf Quellen, aus denen Sie weitere Informationen erhalten können.

Flexibles, plattformübergreifendes Laufzeitmodul. Als Grundlage verwendet ASP.NET 5 einen neuen, flexiblen Laufzeithost. Dieser stellt die Flexibilität zur Verfügung, Ihre Anwendung mit einem von drei verschiedenen Laufzeitmodulen auszuführen:

  1. Microsoft .NET Framework: Sie können Ihre ASP.NET 5-Anwendungen mit dem vorhandenen .NET Framework ausführen. Dies gewährleistet die größtmögliche Kompatibilität für vorhandene Binärdateien.
  2. .NET Core: Eine umgestaltete Version von .NET Framework, die als Sammlung von NuGet-Paketen verfügbar ist, die Sie in Ihre App einbinden können. Mit .NET Core erhalten Sie Unterstützung für echte parallele Versionsverwaltung und können problemlos die aktuellsten .NET-Funktionen für Ihre vorhandene Infrastruktur nutzen. Beachten Sie, dass noch nicht alle APIs für .NET Core verfügbar sind, und vorhandene Binärdateien müssen grundsätzlich neu kompiliert werden, damit sie unter .NET Core ausgeführt werden können.
  3. Mono: Die Mono-CLR ermöglicht das Entwickeln und Ausführen von ASP.NET 5-Apps auf einem Mac- oder Linux-Gerät. Weitere Informationen finden Sie im Blogbeitrag „Develop ASP.NET vNext Applications on a Mac“ unter bit.ly/1AdChNZ.

Unabhängig davon, welche CLR verwendet wird, nutzt ASP.NET 5 eine gemeinsame Infrastruktur zum Hosten der CLR und stellt der Anwendung verschiedene Dienste zur Verfügung. Diese Infrastruktur wird als KRE (K Runtime Environment) bezeichnet. Auch wenn es mysteriös bleibt, was das „K“ in KRE bedeutet (ein Tribut an das Katana-Projekt? K für Krazy Kool?), stellt die KRE alle Komponenten zur Verfügung, die zum Hosten und Ausführen Ihrer App erforderlich sind.

Eine neue HTTP-Pipeline. ASP.NET 5 führt eine neue modulare HTTP-Anforderungspipeline ein, die auf einem Server Ihrer Wahl gehostet werden kann. Sie können Ihre ASP.NET 5-Anwendungen unter IIS, auf jedem auf OWIN (Open Web Interface for .NET) basierenden Server oder in Ihrem eigenen Prozess hosten. Da Sie genau auswählen können, welche Middleware in der Pipeline für Ihre App ausgeführt wird, können Sie den Funktionsumfang so klein oder groß wie erforderlich gestalten und die Leistung von Hardware ohne Betriebssystem nutzen. ASP.NET 5 enthält Middleware für Sicherheit, Anforderungsrouting, Diagnose sowie benutzerdefinierte Middleware mit Ihrem eigenen Entwurf. Die folgende einfache Middlewareimplementierung zeigt z. B. die Verarbeitung des Headers „X-HTTP-Method-Override“:

app.Use((context, next) =>
{
  var value = context.Request.Headers["X-HTTP-Method-Override"];
  if (!string.IsNullOrEmpty(value))
  {
    context.Request.Method = value;
  }
  return next();
});

ASP.NET 5 verwendet ein HTTP-Pipelinemodell, das in zahlreichen Aspekten dem OWIN-basierten Modell ähnelt, das mit dem Katana-Projekt eingeführt wurde. Es gibt jedoch mehrere bemerkenswerte Optimierungen. Ebenso wie Katana unterstützt ASP.NET 5 OWIN. Die Entwicklung wird jedoch vereinfacht, weil eine einfache und leicht handhabbare HttpContext-Abstraktion verwendet wird.

Für alles ein Paket. Paket-Manager haben die Sichtweise von Entwicklern hinsichtlich der Installation, der Aktualisierung und der Verwaltung von Abhängigkeiten verändert. In ASP.NET 5 sind alle Ihre Abhängigkeiten in Paketen enthalten. NuGet-Pakete sind die Bezugseinheit. ASP.NET 5 vereinfacht das Erstellen, Installieren und Verwenden von Paketen aus Paketfeeds sowie das Arbeiten mit Communitypaketen für NPM (Node Package Manager) und Bower. ASP.NET 5 verwendet ein JSON-Format („project.json“) zum Verwalten von NuGet-Paketabhängigkeiten sowie zum Bereitstellen von plattformübergreifender Buildinfrastruktur. Eine Beispieldatei „project.json“ wird in Abbildung 1 gezeigt (eine ausführlichere Erläuterung der unterstützten Eigenschaften finden Sie auf GitHub unter bit.ly/1AIOhK3).

Abbildung 1 – Eine Beispieldatei „project.json“

{
  "webroot": "wwwroot",
  "version": "1.0.0-*",
  "exclude": [
    "wwwroot"
  ],
  "packExclude": [
    "**.kproj",
    "**.user",
    "**.vspscc"
  ],
  "dependencies": {
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta1"
  },
  "frameworks" : {
    "aspnet50" : { },
    "aspnetcore50" : { }
  }
}

Das Beste aus C#. Die Entwurfszeit- und Laufzeitkompilierung für ASP.NET 5-Anwendungen erfolgt mithilfe der verwalteten .NET-Compilerplattform (Codename „Roslyn“). Dies bedeutet, dass Sie die Vorteile der aktuellsten Funktionen der Sprache C# und In-Memory-Kompilierung nutzen können, um überflüssige Datenträger-E/A zu vermeiden. ASP.NET 5-Projekte basieren auf einem neuen Projektsystem, das Ihre Anwendung dynamisch ad-hoc kompiliert, während Sie die Codierung ausführen. Auf diese Weise wird eine Unterbrechung durch einen speziellen Buildschritt vermieden. Sie können die Leistungsfähigkeit von .NET und C# mit der Agilität und Benutzerfreundlichkeit einer interpretierten Sprache nutzen.

Integrierte Abhängigkeitsinjektion. Alle ASP.NET 5-Anwendungen besitzen Zugriff auf einen gemeinsamen DI-Dienst (Dependency Injection), der die Erstellung und das Testen vereinfacht. Alle ASP.NET-Frameworks, die auf ASP.NET 5 (MVC, Web-API, SignalR und Identity) basieren, nutzen diesen gemeinsamen DI-Dienst. In ASP.NET 5 ist ein minimalistischer IoC-Container (Inversion of Control) zum Starten des Systems enthalten. Sie können diesen integrierten IoC-Container auf einfache Weise durch den Container Ihrer Wahl ersetzen.

Vertraute Webframeworks. ASP.NET 5 enthält Frameworks zum Erstellen von Web-Apps und Diensten, z. B. MVC, Web-API, Web Pages (in einer zukünftigen Version verfügbar), SignalR und Identity. Jedes dieser Frameworks wurde portiert, damit es für die neue HTTP-Anforderungspipeline verwendet werden kann. Alle Frameworks bieten Unterstützung für die Ausführung unter .NET Framework, .NET Core oder plattformübergreifende Ausführung.

Die vorhandenen Implementierungen von MVC, Web-API und Web Pages verwenden zurzeit zahlreiche Konzepte und Abstraktionen gemeinsam. Für die eigentliche Implementierung gilt dies jedoch nicht. Als Teil der Portierung dieser Frameworks in ASP.NET 5 hat Microsoft die Entscheidung getroffen, diese Frameworks in einem vereinheitlichten Webstapel neu zu kombinieren. ASP.NET MVC 6 übernimmt die besten Aspekte von MVC, Web-API und Web Pages und kombiniert diese in einem Framework zum Erstellen von Webbenutzeroberflächen und Web-APIs. Dies bedeutet, dass von einem Controller aus basierend auf der Inhaltsaushandlung eine Sicht auf die gleiche einfache Weise gerendert werden kann wie formatierte Daten zurückgegeben werden können.

Neben dieser Vereinheitlichung werden mit ASP.NET MVC 6 zahlreiche neue Funktionen eingeführt:

  • Integrierte DI-Unterstützung
  • Möglichkeit, Controller aus einer beliebigen Klasse zu erstellen – keine Basisklasse erforderlich
  • Aktionsbasierte Anforderungsabfertigung
  • Anzeigekomponenten – ein einfacher Ersatz für untergeordnete Aktionen
  • Routingoptimierungen, z. B. vereinfachtes Attributrouting
  • Asynchrone Ansichten mit Leerpunkten
  • Möglichkeit der Injektion von Servern und Hilfsprogrammen in Ansichten mithilfe von „@inject“
  • ViewStart-Vererbung
  • Taghilfsprogramme

Weitere Informationen und Beispiele finden Sie unter github.com/aspnet/mvc.

Web Forms ist für ASP.NET 5 nicht verfügbar, wird jedoch in .NET Framework vollständig unterstützt. In der nächsten Version von .NET Framework werden wichtige neue Funktionen für Web Forms enthalten sein, z. B. Unterstützung für HTTP 2.0, asynchrone Modellbindung und ein auf Roslyn basierender CodeDom-Anbieter. Wir arbeiten außerdem an verschiedenen Funktionen, die an Web Forms in MVC 6 erinnern, z. B. Taghilfsprogramme und andere Razor-Optimierungen.

Entity Framework

Daten nehmen in vielen Anwendungen eine Schlüsselstellung ein, und Entity Framework (EF) ist eine beliebte Wahl für den Zugriff auf Daten für Entwickler von ASP.NET-Anwendungen. EF7 ist nicht spezifisch für ASP.NET. Diese neue Version von EF spielt jedoch eine wesentliche Rolle in ASP.NET 5.

EF7 ermöglicht neue Plattformen. Die Verwendung von EF ist in Client- und Serveranwendungen weit verbreitet, die das vollständige .NET Framework verwenden. Ein wesentlicher Schwerpunkt von EF7 besteht darin, dass es ermöglicht wird, EF auf den verbleibenden Plattformen verwenden zu können, auf denen .NET-Entwicklung häufig ausgeführt wird. Dabei handelt es sich z. B. um ASP.NET 5-, Windows Store- und Windows Phone-Anwendungen sowie um auf .NET basierende Mac- und Linux-Anwendungen.

Für Windows Phone- und Windows Store-Anwendungen besteht das Anfangsziel darin, lokalen Datenzugriff mithilfe von EF bereitzustellen. SQLite ist die am häufigsten auf Geräten verwendete Datenbank und stellt den primären Speicher für lokale Daten auf Geräten mit EF7 dar. Das vollständige Anbietermodell wird jedoch zur Verfügung gestellt, damit auch andere Datenspeicher unterstützt werden können.

EF7 ermöglicht neue Datenspeicher. Teile von EF beziehen sich eindeutig auf relationale Datenspeicher. Zahlreiche der von EF bereitgestellten Funktionen gelten jedoch auch für nicht relationale Datenspeicher. Beispiele für solche Funktionen sind Änderungsnachverfolgung, LINQ und UOW (Unit of Work, Arbeitseinheit). EF7 ermöglicht Anbieter, die nicht relationale Datenspeicher als Ziel verwenden, z. B. Microsoft Azure-Tabellenspeicher.

Wir versuchen ausdrücklich nicht, eine Abstraktionsschicht zu erstellen, die den Typ des Datenspeichers verbirgt, der als Ziel verwendet wird. Die allgemeinen Muster/Komponenten, die für die meisten Datenspeicher gelten, werden vom Kernframework bereitgestellt. Aspekte, die für bestimmte Typen von Datenspeichern spezifisch sind, sind als anbieterspezifische Erweiterungen verfügbar. Das Konzept eines Modellgenerators, der Ihnen das Konfigurieren Ihres Modells ermöglicht, ist Teil des Kernframeworks. Die Möglichkeit zum Konfigurieren von Funktionen wie etwa kaskadierendem Delete für eine Fremdschlüsseleinschränkung wird jedoch als Erweiterung im relationalen Datenbankanbieter enthalten sein.

EF7 ist einfach und erweiterbar. EF7 ist eine einfache und erweiterbare Version, die einige häufig verwendete Funktionen bereitstellt. Außerdem können wir einige häufig geforderte Funktionen integrieren, deren Implementierung in die EF6-Codebasis schwierig gewesen wäre, die jedoch von Anfang an in EF7 enthalten sind.

Das Team behält die Muster und Konzepte bei, mit denen Sie in EF vertraut sind. Dies gilt nur dann nicht, wenn überzeugende Gründe dafür sprechen, etwas zu ändern. Sie arbeiten mit der gleichen auf „DbContext/DbSet“ basierenden API, die jedoch auf Bausteinkomponenten aufbaut, die bei Bedarf einfach zu ersetzen oder zu erweitern sind – dies ist das gleiche Muster, das auch für einige der isolierten Komponenten wird, die in aktuellen EF-Versionen hinzugefügt wurden.

Weitere Informationen zu EF7. Weitere Informationen zu EF7 finden Sie auf der GitHub-Seite „What Is EF7 All About“ unter aka.ms/AboutEF7. Diese Seite enthält Informationen zum Entwurf, Links zu Blogbeiträgen und Anleitungen zum Testen von EF7.

ASP.NET-Befehlszeilentools

Einer der wichtigen Vorgaben für ASP.NET 5 war es, eine Befehlszeilen-Benutzeroberfläche bereitzustellen, bevor wir die Toolbenutzeroberfläche erstellen. Dies bedeutet, dass fast alle Aufgaben, die für eine ASP.NET 5-Anwendung erforderlich sind, über die Befehlszeile ausgeführt werden können. Der Hauptgrund für diese Vorgehensweise besteht im Sicherstellen, dass eine gangbare Option für die Verwendung von ASP.NET 5 ohne Visual Studio für Benutzer von Mac- oder Linux-Computern ermöglicht wird.

KVM. Das erste Tool, das Sie benötigen, um die umfassende Befehlszeilen-Benutzeroberfläche für ASP.NET 5 nutzen zu können, ist KVM (K Version Manager). Das KVM-Befehlszeilentool kann neue Versionen der KRE herunterladen, und Sie können mit dem Tool zwischen diesen wechseln. Die KRE enthält weitere Befehlszeilentools, die Sie ggf. verwenden können. Wie KVM implementiert und wie das Tool bezogen wird, hängt vom Betriebssystem ab. Sie können KVM für Ihre Plattform herunterladen und installieren, indem Sie den entsprechenden Befehl aus github.com/aspnet/Home ausführen.

Sobald Sie über KVM verfügen, sollten Sie in der Lage sein, eine Eingabeaufforderung zu öffnen und den Befehl „kvm“ auszuführen. Wenn Sie „kvm list“ ausführen, wird die Liste aller KRE-Versionen auf Ihrem Computer angezeigt. Abbildung 2 zeigt dies.

Ausführen von „kvm list“ in der Befehlszeile zum Abrufen einer Liste der KRE-Versionen auf Ihrem Computer
Abbildung 2 – Ausführen von „kvm list“ in der Befehlszeile zum Abrufen einer Liste der KRE-Versionen auf Ihrem Computer

Wenn Ihre Liste keine Einträge enthält, sind keine Versionen der KRE in Ihrem Benutzerprofil vorhanden. Zum Beheben dieses Problems können Sie den Befehl „kvm upgrade“ ausführen. Dieser Befehl ermittelt die aktuellste verfügbare Version der KRE, lädt diese herunter und ändert Ihre Umgebungsvariable „PATH“, damit Sie die anderen Befehlszeilentools in der KRE selbst verwenden können.

Sie können „kvm install <version/latest>“ verwenden, um eine bestimmte Version zu installieren, ohne diese als Standardeinstellung zu definieren. Verwenden Sie den Schalter „-r“, um anzugeben, ob die .NET Core- oder die .NET Framework-Version der KRE heruntergeladen werden soll, und die Schalter „-x86“ und „-amd64“, um die 32- oder 64-Bit-Versionen der KRE herunterzuladen. Die Schalter „runtime“ und „bitness“ können für die Installation bzw. ein Upgrade angegeben werden.

Nachdem Sie „kvm upgrade“ aufgerufen haben, sind Sie in der Lage, die Befehle „K“ und „KPM“ zu verwenden. „K“ kann verwendet werden, um Anwendungen auszuführen, während „KPM“ zum Verwalten von Paketen verwendet wird.

Wie funktioniert KVM? Im Kern ist KVM einfach ein bequemes Verfahren zum Bearbeiten Ihrer Umgebungsvariablen „PATH“. Wenn Sie „KVM use <version>“ verwenden, wird nur Ihre Umgebungsvariable „PATH“ in den Ordner „bin“ der KRE-Version geändert, die Sie als in Ihrem „PATH“ vorhanden angegeben haben. Standardmäßig wird die KRE durch Kopieren und Extrahieren der KRE-ZIP-Datei in „%USERPROFILE%\.kre\packages“ installiert. Wenn Sie also „KVM use 1.0.0-beta1“ eingeben, stellt KVM sicher, dass sich „%USERPROFILE%\.kre\packages\KRE-CLR-x86.1.0.0-beta1\bin“ in Ihrem „PATH“ befindet.

KPM. Das nächste Tool, das Sie verwenden möchten, ist der KRE-Paket-Manager (KPM). KPM ist für zwei Hauptfunktionen verantwortlich und besitzt einen etwas geringeren Funktionsumfang:

  1. Sie können „kpm restore“ in einem Ordner mit einer Datei „project.json“ ausführen, um alle Pakete herunterzuladen, die Ihre Anwendung benötigt.
  2. Auf diese Weise wird der Paketerstellungsbefehl „kpm pack“ bereitgestellt, der aus Ihrer Anwendung ein eigenständiges, ausführbares Image generiert. „Image“ bedeutet in diesem Zusammenhang eine Ordnerstruktur, die auf den Server kopiert und ausgeführt werden soll. Sie enthält alle Pakete, die Ihre Anwendung erfordert, sowie optional die KRE, unter der die Anwendung ausgeführt werden soll.

Der Befehl „restore“ kann in einem Ordner ausgeführt werden, der eine Datei „project.json“ enthält. Er untersucht die Datei, stellt mithilfe von„NuGet.config“ eine Verbindung mit einem NuGet-Feed her und versucht, alle Pakete herunterzuladen, die Ihre Anwendung benötigt. Standardmäßig installiert der Befehl diese Pakete in „%USERPROFILE%\.kpm\packages“. Daher muss nur eine Kopie eines beliebigen Pakets auf Ihrem Entwicklungscomputer vorhanden sein – auch wenn es in mehreren Projekten verwendet wird.

Wenn Sie Ihre Anwendung packen (durch Ausführen von „kpm pack“), wird ein Ordner generiert, der alles enthält, was Ihre App für die Ausführung benötigt, z. B. Pakete, Quelldateien und Ihren Webstamm. Sie können sogar optional die KRE integrieren. Standardmäßig wird jedoch davon ausgegangen, dass sich die KRE bereits auf dem Server befindet.

Befehl „K“. Der Befehl „K“ führt eine ASP.NET 5-Anwendung über die Befehlszeile tatsächlich aus. Der Befehl „K“ ist in der KRE enthalten (wie auch KPM) und stellt den Einstiegspunkt zum Ausführen einer Anwendung in der KRE dar.

Das Hauptverfahren zum Ausführen des Befehls „K“ besteht im Ausführen eines der Befehle in Ihrer Datei „project.json“. Befehle werden mit ihrem Namen in der Datei „project.json“ unter der Eigenschaft „commands“ angegeben. Standardmäßig enthält die ASP.NET 5-Startwebvorlage einen Befehl „web“ in der Datei „project.json“, die Ihre App hostet und an Port 5000 lauscht. Wenn Sie diesen Befehl ausführen möchten, führen Sie einfach „k web“ aus.

Visual Studio-Updates für ASP.NET 5

Eines der ursprünglichen Ziele von ASP.NET 5 bestand darin, Teams eine großartige Benutzererfahrung zu bieten, deren Mitglieder verschiedene Tools verwenden. Einige der Teammitglieder verwenden z. B. Windows und Visual Studio und arbeiten mit anderen Personen zusammen, die Sublime Text auf einem Mac einsetzen (informieren Sie sich über die Optionen für plattformübergreifende .NET-Entwicklungstools unter omnisharp.net). Damit dieses Ziel erreicht wird, mussten wir einen Schritt zurück machen und die Visual Studio-Unterstützung überdenken. In früheren Versionen von Visual Studio setzte das Projektsystem voraus, dass der Großteil der Entwicklung in Visual Studio ausgeführt wird. Visual Studio funktionierte nicht gut, wenn andere Tools zum Erstellen von Dateien oder Ändern des Projekts verwendet wurden. Visual Studio verwaltete in der CSPROJ-Datei z. B. eine Liste von Dateien, aus denen das Projekt bestand. Wenn Sie ein Tool zum Erstellen einer neuen Datei für Ihr Projekt verwendeten, mussten Sie die CSPROJ-Datei bearbeiten, damit die neue Datei enthalten war.

Wenn Sie in Visual Studio 2015 ein neues ASP.NET 5-Projekt erstellen, machen Sie eine neue Erfahrung. Sie können Ihr Projekt noch immer wie gewohnt entwickeln, debuggen und ausführen. Neben den Standardfunktionen, die Sie bereits in ASP.NET-Projekten kennen, sind einige neue Funktionen jedoch für ASP.NET 5 einmalig. Sie können nun mithilfe der Plattform und der Tools Ihrer Wahl entwickeln. Im Folgenden werde ich einige dieser Funktionen vorstellen.

Unterstützung für alle Dateien im Ordner. In ASP.NET 5 werden alle Dateien unter dem Projektverzeichnis automatisch in das Projekt eingeschlossen. Sie können Dateien in der Datei „project.json“ von der Kompilierung oder Veröffentlichung ausschließen. Weitere Informationen zum Ausschließen von Dateien in der Datei „project.json“ finden Sie auf der GitHub-Seite unter bit.ly/1AIOhK3. Nachdem das Projekt geladen wurde, startet Visual Studio einen Dateiwatcher und aktualisiert den Projektmappen-Explorer mit den Änderungen. Da der Projektmappen-Explorer die Dateien unter dem Projektverzeichnis immer überwacht, haben wir den Speicherort geändert, an dem die generierten Dateien gespeichert werden. Anstatt generierte Dateien unter dem Projekt („bin\“ und „obj\“) zu speichern, werden generierte Dateien nun standardmäßig in einem Ordner namens „artifacts“ zusammen mit der Projektmappendatei gespeichert.

Bearbeiten, Speichern und nur den Browser aktualisieren. In vorhandenen ASP.NET-Anwendungen müssen Sie nach dem Ändern der serverseitigen Logik (z. B. des MVC-Controllercodes oder eines Filters) die Anwendung erneut erstellen und bereitstellen, damit die Änderungen im Browser angezeigt werden. Microsoft hatte sich zum Ziel gesetzt, dass sich der Workflow für Webentwickler so einfach und flexibel wie beim Arbeiten mit interpretierten Plattformen (z. B. Node.js oder Ruby) gestaltet, obwohl auch die Leistungsfähigkeit von .NET genutzt wird. In ASP.NET 5-Projekten erkennt ein Dateiwatcher die Änderung und startet die Anwendung neu, wenn Sie Ihren C#-Code bearbeiten und speichern. Die Anwendung wird im Arbeitsspeicher erneut erstellt, und Sie können die Ergebnisse der Änderung im Browser fast in Echtzeit anzeigen. Beachten Sie, dass dieser Workflow nur unterstützt wird, wenn Sie nicht debuggen, damit Ihre Debugsitzung nicht unterbrochen wird.

Aktualisierte Unterstützung für NuGet-Pakete. In ASP.NET 5 sind alle Abhängigkeiten NuGet-Pakete. Ihre Paketabhängigkeiten werden in der Datei „project.json“ aufgelistet, und nur direkte Verweise werden aufgeführt. Das Laufzeitmodul löst Paketabhängigkeiten für Sie auf, und Sie können das gesamte Diagramm Ihrer Paketabhängigkeiten im Projektmappen-Explorer anzeigen und durchsuchen.

Wenn Sie ein NuGet-Paket installieren möchten, fügen Sie das Paket einfach der Datei „project.json“ hinzu. Sobald Sie die Datei „project.json“ gespeichert haben, wird ein Paketwiederherstellungsbefehl initiiert, und alle Änderungen an Ihren Abhängigkeiten werden im Knoten „References“ im Projektmappen-Explorer angezeigt. Sie können das Ergebnis der Paketwiederherstellung sowie alle ggf. aufgetretenen Fehler im Protokoll des Paket-Managers im Ausgabefenster anzeigen. Sie können sogar IntelliSense für lokal auf dem Computer mit Visual Studio installierte Pakete sowie für Pakete nutzen, die im öffentlichen NuGet-Feed verfügbar sind. Abbildung 3 zeigt dies.

IntelliSense für NuGet-Paketabhängigkeiten in der Datei „project.json“
Abbildung 3 – IntelliSense für NuGet-Paketabhängigkeiten in der Datei „project.json“

In vorhandenen ASP.NET-Projekten wird beim Installieren eines NuGet-Pakets in einem Projekt eine Kopie dieses NuGet-Pakets (und aller seiner Abhängigkeiten) in einem Ordner „packages“ im Umfeld des Projekts gespeichert. In ASP.NET 5 wird ein Cache verwendet, damit NuGet-Pakete für Projekte von allen Benutzern gemeinsam genutzt werden können. Wenn eine Paketwiederherstellung in ASP.NET 5 auftritt, werden alle im Cache bereits installierten Pakete einfach wiederverwendet. Sie können den Paketcache in Ihrem Benutzerprofil unter dem Ordner „.kpm“ anzeigen und ändern.

ASP.NET 5-Projekte werden standardmäßig In-Memory durch das Laufzeitmodul erstellt, und es werden keine Artefakte auf dem Datenträger persistent gespeichert. Sie können jedoch auf einfache Weise den Buildvorgang für NuGet-Pakete für Ihre ASP.NET 5-Klassenbibliotheken aktivieren, indem Sie das Kontrollkästchen „Alle Ausgaben beim Buildvorgang generieren“ auf der Registerkarte „Build“ der Eigenschaftenseite für das Projekt aktivieren. Nachdem diese Option ausgewählt wurde, finden Sie das erstellte NuGet-Paket unter dem Ordner „artifacts“ für das Projekt.

Erstellen und Abrufen kombinierter IntelliSense-Funktionen für mehrere Zielframeworks. In ASP.NET 5 listen Sie Ihre Zielframeworks in der Datei „project.json“ auf. Ihr Projekt wird dann für jedes aufgelistete Zielframework erstellt. Auf diese Weise können Sie Probleme viel schneller erkennen, weil Sie nicht explizit in das Zielframework wechseln müssen, und Sie können eine übergreifende Kompilierung für mehrere Zielframeworks aus einem Projekt ausführen.

Außerdem haben wir die IntelliSense-Benutzeroberfläche für das ASP.NET 5-Projekt mit kombiniertem IntelliSense aktualisiert. Kombiniertes IntelliSense zeigt eine erweiterte QuickInfo an, wenn IntelliSense für einen angegebenen Abschluss für mindestens eines der Zielframeworks abweicht, um die Unterschiede aufzuzeigen. Abbildung 4 zeigt dies für die Klasse „StringComparison“.

QuickInfo mit kombiniertem IntelliSense für mehrere Zielframeworks
Abbildung 4 – QuickInfo mit kombiniertem IntelliSense für mehrere Zielframeworks

In Abbildung 4 erkennen Sie, dass der Wert „InvariantCulture“ für die Enumeration „StringComparison“ nicht verfügbar ist, wenn ASP.NET Core 5.0 verwendet wird.

Webpublishing. In Visual Studio 2015 arbeiten die Microsoft-Entwickler an einem neuen Veröffentlichungsvorgang für ASP.NET 5-Projekte. In der Preview-Version unterstützt die ASP.NET 5-Veröffentlichung eine Veröffentlichung auf Azure-Websites und im Dateisystem (z. B. im Ordner „local/network“). Wenn die Veröffentlichung auf Azure-Websites erfolgt, können Sie die gewünschte Buildkonfiguration und KRE-Version auswählen. In späteren Versionen wird diese Unterstützung auf eine breitere Palette von Zielen erweitert.

Migrieren zu ASP.NET 5

Das Verschieben vorhandener Webanwendungen in ASP.NET 5 beinhaltet das Erstellen eines neuen ASP.NET 5-Projekts für Ihre vorhandene Anwendung und das anschließende Migrieren des Codes und der Abhängigkeiten für die Ausführung im neuen Framework. Das Erstellen eines neuen ASP.NET 5-Projekts für Ihre Anwendung ist relativ einfach. Fügen Sie Ihrem Projektordner zuerst eine Datei „project.json“ hinzu. Anfangs muss die Datei „project.json“ nur ein leeres JSON-Objekt enthalten (z. B. „{}“). Verwenden Sie im nächsten Schritt „Datei | Projekt öffnen“, um die Datei „project.json“ in Visual Studio 2015 Preview zu öffnen. Nachdem Sie die Datei „project.json“ geöffnet haben, erstellt Visual Studio ein ASP.NET 5-Projekt mit einer KPROJ-Datei und schließt alle Dateien und Verzeichnisse im Umfeld der Datei „project.json“ automatisch in das Projekt ein. Ihre Projektdateien sollten in Ihrem neuen ASP.NET 5-Projekt im Projektmappen-Explorer angezeigt werden. Sie haben jetzt ein ASP.NET 5-Projekt für Ihre vorhandene Webanwendung erstellt!

Das Migrieren Ihres Codes und der Abhängigkeiten, damit Ihr neues ASP.NET 5-Projekt ordnungsgemäß erstellt und ausgeführt wird, ist ein komplexerer Vorgang. Sie müssen die Datei „project.json“ mit den Paketabhängigkeiten, Framework-Assemblyverweisen und Projektverweisen auf oberster Ebene aktualisieren. Sie müssen Ihren Code migrieren, damit er die neuen HTTP-Abstraktionen, das neue Middlewaremodell und die neuen Versionen des ASP.NET-Webframeworks verwendet. Sie müssen eine Umstellung auf die neue Infrastruktur ausführen, um Aspekte wie etwa Konfiguration, Protokollierung und DI zu behandeln. Für die Portierung Ihrer Anwendung für die Ausführung unter .NET Core sind weitere Plattformänderungen erforderlich, und es müssen Einschränkungen berücksichtigt werden. Diese Überlegungen gehen weit über den Rahmen dieses Artikels hinaus. Wir arbeiten jedoch daran, vollständige Migrationsanleitungen in einem zukünftigen Artikel bereitzustellen. Der Aufwand eines Umstiegs auf ASP.NET 5 mag erheblich sein. Microsoft ist jedoch überzeugt, dass die Vorteile der Bereitstellung eines Open Source-Frameworks, das communitygesteuert, plattformübergreifend und bereit für die Cloud ist, diesen zusätzlichen Aufwand wert sind.

Nächste Schritte

In diesem Artikel habe ich ASP.NET 5 vorgestellt – von den Konzepten auf Übersichtsebene bis hin zu den einzelnen Komponenten. Es gibt viel Neues zu lernen! Glücklicherweise unterstützen Sie dabei zahlreiche Ressourcen.

Die ASP.NET-Website unter asp.net/vnext weist einen eigenen Inhaltsbereich zu diesem Thema auf. Diese Seite wird ständig aktualisiert und enthält Neuigkeiten zu dieser Version, Dokumentation, Lernprogramme und Communityressourcen.

Das ASP.NET vNext Community Standup ist eine offene wöchentliche Besprechung mit dem ASP.NET-Team. Sie findet jeden Dienstag abwechselnd vormittags und nachmittags (Pacific Time) statt, damit Entwickler weltweit teilnehmen können. Nehmen auch Sie teil, um sich über Neuerungen zu informieren, Fragen zu stellen und Ihr Feedback einzubringen.

Sie können Hilfe von anderen Entwicklern und den Mitgliedern des ASP.NET-Teams im ASP.NET vNext-Forum zu diesem Thema unter bit.ly/1xOuQx9 erhalten. Unter bit.ly/1HDAGFX steht auch ein Chatroom in „JabbR.net“ zur Verfügung, in dem es um Fragen zur ASP.NET 5-/vNext-Entwicklung geht.

Da ASP.NET 5 als ein Open Source-Projekt entwickelt wird, können Sie sich am Entwicklungsvorgang beteiligen. Die Quellrepositorys unter github.com/aspnet sind die realen Liverepositorys, mit denen das Team die Entwicklung ausführt. Sie sind kein Spiegel eines internen Repositorys. Dies bedeutet, dass Sie die Commits sehen können, wenn sie erfolgen, und dass Sie jederzeit eine Momentaufnahme des Codes abrufen können. Die Repositorys enthalten Quellcode für die Frameworks (z. B. KRuntime, Razor und MVC) sowie Funktionstests und Beispielprojekte. Wir begrüßen es, wenn Sie Feedback hinterlassen – Bugs und Vorschläge zu Funktionen –, indem Sie Fragen stellen oder Themen in den GitHub-Repositorys kommentieren.

Webentwicklern auf der Microsoft-Webplattform stehen spannende Zeiten bevor! Wir empfehlen Ihnen, frühzeitig einzusteigen, damit Sie die Vorteile der neuen Funktionen nutzen und Feedback während des Entwicklungsvorgangs bereitstellen können.

Schließlich möchte ich noch Glenn Condron, Jon Galloway, Sayed Ibrahim Hashimi, Scott Hunter und Rowan Miller danken, dass sie weit mehr als eine technische Durchscht dieses Dokuments geleistet und tatsächlich zu erheblichen Teilen dieses Artikels beigetragen haben.


Daniel Roth ist Senior Program Manager des ASP.NET-Teams, das zurzeit an ASP.NET 5 arbeitet. Die .NET-Entwicklung ist seine Passion, und Kunden schätzen an ihm, dass er Frameworks einfach und leicht zu verwenden gestaltet.

Unser Dank gilt den folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Glenn Condron, David Fowler, Jon Galloway, Sayed Ibrahim Hashimi, Scott Hunter, Rowan Miller und Praburaj Thiagaraj