Warum ein ASP.NET 5-Klassenbibliotheksprojekt erstellen?


98

Ich versuche herauszufinden, was ein "ASP.NET 5-Klassenbibliothek" (vNext) C # -Projekt mit ASP.NET zu tun hat. Warum ein Projekt mit dieser Vorlage erstellen und nicht nur ein reguläres C # -Projekt "Klassenbibliothek"?

Ich mag die neuen Funktionen wie die Datei project.json anstelle der Datei .csproj usw., aber es scheint nicht richtig, eine Klassenbibliothek "ASP.NET" zu erstellen, wenn das Projekt nichts mit ASP.NET oder IIS usw. zu tun hat Es ist nur ein Projekt für die Geschäftslogikschicht. Eine neue WebApi ASP.NET-Website wird möglicherweise auf dieses Projekt verweisen, dies ist jedoch derzeit nicht relevant.

Ist es nur schlecht benannt? Sollte es nur "vNext Class Library" heißen und kein Symbol verwenden, das wie eine Web-App aussieht?


Gibt es eine Schätzung, wann sie glauben, dass es möglich ist, ein vorhandenes Projekt vom Typ gute alte Klassenbibliothek hinzuzufügen? Dies ist der letzte Gedanke, den ich erwartet habe, um meine MVC 5 auf ASP.NET 5 MVC 6-Migration zu verschieben.
Radbyx

"ASP.NET 5 Class Library" hat ein anderes Framework als ASP .NET Core, aber Core verfügt über eine eigene Core Class Library . Verwenden Sie diese stattdessen.
Jaider

Antworten:


100

Warum ein ASP.NET 5-Klassenbibliotheksprojekt erstellen?

Es gibt eine Reihe von Vorteilen von ASP.NET 5-Klassenbibliotheksprojekten ( .kproj) gegenüber Klassenbibliotheksprojekten ( .csproj):

  1. ASP.NET 5 Klassenbibliotheken unterstützen leicht Cross-Kompilierung Projekte auf mehrere Ziele, wie zum Beispiel aspnet50, aspnetcore50, net45und verschiedene andere tragbare Klassenbibliothek Variationen. Dies umfasst eine umfassende Visual Studio-Unterstützung für Intellisense, mit der Sie benachrichtigt werden, welche APIs für welche Ziele verfügbar sind.
  2. NuGet-Pakete werden automatisch erstellt, was bei Klassenbibliotheken sehr häufig vorkommt.
  3. Bessere Produktivität, wenn es darum geht, den Projektmappen-Explorer automatisch zu aktualisieren, wenn sich das Dateisystem ändert. Weniger Konflikte in der Quellcodeverwaltung beim Versuch, widersprüchliche Änderungen in der * .csproj-Datei zusammenzuführen.
  4. Kann plattformübergreifend kompiliert werden (teilweise, weil es nicht von MSBuild abhängt)

Sie können ein * .csproj-Projekt aus einem * .kproj-Projekt referenzieren (dies wurde mit der neuen Vorschau von Visual Studio 2015 erheblich vereinfacht), dies war jedoch immer mit einigen manuellen Schritten möglich.

Warum enthält der Name "ASP.NET"?

Was die Namen angeht, handelt es sich um ein Relikt der Geschichte, das bald angesprochen wird. Der neue Projekttyp ist weit über ASP.NET 5-Anwendungen hinaus nützlich. Erwarten Sie neue Namen in einer zukünftigen Vorschau von Visual Studio:

  • .NET-Konsolenanwendung (plattformübergreifend)
  • .NET-Klassenbibliothek (plattformübergreifend)

Update 13.05.2015

Mit der Veröffentlichung von Visual Studio 2015 RC können Sie die aktualisierten Projektvorlagennamen anzeigen:

  • Klassenbibliothek (Paket)
  • Konsolenanwendung (Paket)

Diese verwenden die project.jsonDatei und die .NET-Ausführungsumgebung (DNX), um das Projekt zu erstellen, auszuführen und (in ein NuGet-Paket) zu packen.

Diese Projektvorlagen werden weiterhin im Dialogfeld "Neues Projekt" unter dem Knoten "Web" angezeigt, jetzt aber auch im Hauptknoten "Visual C #".

VS2015 RC Class Lib / Console App-Vorlagen


Können Sie # 2 erweitern - meinen Sie, dass Intellisense eine API vorschlägt und dann das Nuget-Paket für Sie herunterlädt? Ich tippe JQuery und es wird es mir geben?
Simon_Weaver

3
@Simon_Weaver Ich meine, während das reguläre Klassenbibliotheksprojekt nur eine DLL und einen PDB erzeugt, generiert das neue ein NUPKG (NuGet-Paket), das auf nuget.org hochgeladen werden kann.
Eilon

2
.kproj wurde seitdem in .xproj
Boris Lipschitz

10

Dies ist eine interessante Beobachtung. Die aktuelle Vorlage generiert eine Klassenbibliothek, die mit der ASP.NET 5-Laufzeit kompatibel ist. Sie erhalten das nicht aus der normalen C # -Klassenbibliothek.

Ich habe das folgende Problem eingereicht, um diese Entwurfsfrage zu verfolgen: https://github.com/aspnet/Home/issues/281


Ich werde Ihre Ausgabe sehen, danke. Offensichtlich das gleiche Namensproblem mit "ASP.NET 5 Console Application". Vielleicht sollte es als "vNext Console Application" bezeichnet werden, andernfalls können Entwickler es mit einer Art Konsolenanwendung auf einer ASP.NET-Website verwechseln. Vielleicht sollte der Speicherort der Vorlagen von "Visual C # -> Web" nach "Visual C # -> vNext"
verschoben werden

Das Github-Problem wurde geschlossen. Bessere Projektnamen - danke: github.com/aspnet/Home/issues/281
mkaj

3

Nach meinem Verständnis besteht ein Vorteil darin, dass das Endprodukt des ASP.NET 5-Klassenbibliotheksprojekts ein NuGet-Paket ist (und nicht nur die DLL-Assembly).

Sie können das NuGet-Paket generieren, indem Sie mit der rechten Maustaste auf das Projekt in Visual Studio 2015 klicken und die Option "Veröffentlichen ..." auswählen. Oder Sie können "KPM Pack" in der Befehlszeile verwenden.

Sie können auch die ASP.NET 5 Core-Laufzeit verwenden, damit Ihre Bibliothek plattformübergreifend ausgeführt werden kann.


Ist es schlecht benannt? Hat nichts mit ASP.NET zu tun?
mkaj

1
Eines der Hauptziele von ASP.NET 5 besteht darin, die plattformübergreifende Ausführung zu ermöglichen. Einige haben gefragt: "Sollte dies nicht stattdessen .NET Core heißen?" Zumindest für den Moment geht es bei Microsofts plattformübergreifendem Ansatz nur um das Web (und Konsolen-Apps) und unterstützt keine Desktop-Entwicklung wie Java. Um zu betonen, dass es um das Web geht, wird alles unter dem Namen "ASP.NET 5" gebrandmarkt. Wenn Sie eine Bibliothek erstellen möchten, die plattformübergreifend ausgeführt wird, sollte es sich um eine ASP.NET 5-Klassenbibliothek handeln.
Thomas Kadlec

Das heißt, ich kann meinem Chef "Ja" sagen, wenn er fragt,
ob
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.