Aspnetcore: Die neuen ASP.NET Core 2.0-Pakete können nicht mehr auf .NET Desktop verwendet werden

Erstellt am 5. Mai 2017  ·  761Kommentare  ·  Quelle: dotnet/aspnetcore

Bearbeiten: Der Plan „keine .NET Framework-Unterstützung für ASP.NET Core 2.0“ wurde offiziell storniert und die Ausführung von ASP.NET Core 2.0 auf .NET Desktop wird in den nächsten Vorschauversionen unterstützt. Weitere Informationen finden Sie unter Ankündigung von ASP.NET Core 2.0.0 – Vorschau1 und Updates für .NET-Webentwickler oder sehen Sie sich .NET Standard 2.0 und .NET Core 2.0 an.

Ich möchte allen danken, die sich die Zeit genommen haben, an diesem Thread teilzunehmen; Zweifellos hat es dazu beigetragen, den Microsoft-Chefs klar zu machen, dass sie eine so große bahnbrechende Änderung nicht in letzter Minute stillschweigend übernehmen konnten, ohne ihre Community zu konsultieren oder die tatsächlichen Auswirkungen ihrer einseitigen Entscheidungen auf das gesamte Ökosystem zu messen.

Auch wenn wir alle unterschiedliche Meinungen hatten, war das Wichtigste, eine echte Diskussion über diese Änderung zu führen. Es ist eindeutig ein riesiger – und beispielloser – Erfolg (>150 Teilnehmer und mehr als 700 Nachrichten, woot!)

Es ist erstaunlich, eine so großartige Community in Aktion zu sehen, ich bin so stolz darauf, ein Teil davon zu sein :call_me_hand:


Ursprüngliche Nachricht: Heute früh wurden die meisten ASP.NET Core 2.0-Pakete aktualisiert, um auf netcoreapp2.0 anstelle von netstandard1.* und net4* abzuzielen (z. B. https://github.com/ aspnet/Security/pull/1203 und https://github.com/aspnet/Mvc/pull/6234), wodurch sie vollständig inkompatibel mit .NET Desktop und Mono sind.

Obwohl diese große bahnbrechende Änderung wahrscheinlich große Auswirkungen auf das gesamte ASP.NET-Ökosystem haben wird, wurde sie weder diskutiert noch öffentlich angekündigt (was einmal mehr zeigt, dass das ASP.NET-Team nicht sehr gut kommunizieren kann und nicht wirklich bereit ist zu diskutieren so wichtige Änderungen mit seiner Community, aber das ist eine andere Geschichte).

In diesem Thread erwähnte @Eilon teilweise die Gründe für diese Entscheidung, sagte aber nicht, ob weniger extreme Optionen in Betracht gezogen wurden oder nicht (z. B. Cross-Compilation, Einführung eines netstandard2.1 TFM usw.):

Ja, für ASP.NET Core 2 zielen die meisten Bibliotheken auf .NET Core 2 ab, um neue APIs zu verwenden, die noch nicht in einem .NET Standard TFM verfügbar sind. Code, der auf mehrere Plattformen abzielen muss, z. B. Microsoft.Extensions.*, Entity Framework Core und einige andere Bibliotheken, verwendet weiterhin .NET Standard.

Meine Frage ist einfach: Werden Sie diese Änderungen irgendwann vor RTM ändern/zurücksetzen, damit die Leute die ASP.NET Core 2.0-Pakete auf .NET Desktop verwenden können, oder ist ASP.NET Core 2.0 auf .NET Desktop definitiv tot? (was für viele Leute, mich eingeschlossen, ein großer Blocker wäre).

Danke.

Hilfreichster Kommentar

Ich kann verstehen, warum dies zunächst ein beängstigender WTF-Moment ist. Lassen Sie mich erklären, weil es weniger ausgeflippt ist, als es scheint.

  • Sie haben gesagt, dass .NET-Kunden zusammenarbeiten müssen. Völlig einverstanden.

    • Wir können Netstandard-Bibliotheken zwischen ASP.NET Core 2.0 und ÜBERALL teilen.

    • Aufgrund von Typeforwarding und netstandard20 können wir sogar auf viele net461+-Assemblys von ASP.NET Core 2.0 verweisen

  • Sie sagten, WebApps müssen möglicherweise Folgendes verwenden:

    • AD – Insgesamt ist dies eine Lücke, wenn Sie LDAP direkt aufrufen möchten. Sie können sich sicherlich JETZT gegen Windows Auth authentifizieren. Wir planen, um den Sommer herum speziell den DirectoryServices-Namespace für Core 2.0 zu haben

    • Zeichnen – Das ist absolut eine Lücke. Wir planen, dies für Core 2.0 im Sommerzeitraum zu haben. Bis dahin existieren diese Netzstandard-Optionen auch ImageSharp, ImageResizer, Mono-Optionen usw

    • COM-Automatisierung – Dies war unter Core 2.0 noch nie möglich, aber Sie können sicherlich PInvoke verwenden, wenn Sie sich verletzen möchten. Sie können WebAPI auch für einen net461+-Prozess lokalisieren, wenn Sie sich wirklich verletzen wollen.

    • Code mit WFP-Apps teilen – JA. Mit netstandard2.0 durchaus möglich.

  • Dies ist eine seltsame Änderung.

    • Fühlt sich so an, aber…

Denken Sie so darüber nach. WPF ist nicht netstandard2.0, es weiß, dass es auf net461+ ist und das ist in Ordnung. Es ist optimiert, kann aber auf Netstandard-Bibliotheken verweisen. ASP.NET Core 2.0 ist für Core 2.0 optimiert, kann aber auf gemeinsam genutzte Bibliotheken verweisen. Xamarin ist das gleiche.

.NET Core ist Seite an Seite und entwickelt sich schnell. Es ist VIEL schneller als .NET (Full) Framework bewegen kann, was gut ist. Durch den Aufbau von ASP.NET Core 2.0 auf .NET Core 2.0 (was, wie Sie sich erinnern, ein SUPERSET von .NET Standard ist), bedeutet dies, dass Dinge schneller als NetFx oder sogar Netstandard erstellt werden können.

NetCore > Net Standard > NetFx, wenn es um Entwicklungsgeschwindigkeit und Innovation geht.

Punkt ist, wenn Sie neue Arbeiten machen, netstandard20. Wenn Sie über ältere net461+-Bibliotheken verfügen, können die meisten davon unter ASP.NET Core 2.0 referenziert werden.

ASP.NET Core 1.1, das auf .NET Framework ausgeführt wird, wird nach der Veröffentlichung von 2.0 ein Jahr lang vollständig unterstützt. Diese Workload wird bis mindestens Juli 2018 vollständig unterstützt.

Die verbleibenden großen Lücken, die in .NET Core 2 fehlen, sind System.DirectoryServices und System.Drawing. Wir arbeiten an einem Windows-Kompatibilitätspaket, das beide in diesem Sommer auf .NET Core unter Windows ermöglichen würde.

Was wir von Ihnen allen brauchen, ist eine klare Liste/ein Verständnis dafür, WARUM Sie denken, dass Sie ASP.NET Core 2.0 benötigen, um auf net461+ zu laufen.

Alle 761 Kommentare

Dies wäre eine äußerst seltsame und schlechte Änderung. Ich habe viel reinen netfx-Kerncode für asp.net geschrieben und möchte nicht, dass diese Investition verschwendet wird. Generell müssen .NET-Kunden in absehbarer Zeit in der Lage sein, zwischen ASP.NET Core- und Desktop-Code interoperabel zu sein – stellen Sie sich Webapps vor, die Active Directory oder Office-COM-Automatisierung verwenden oder die Miniaturansichten auf Basis von System.Drawing erstellen Bibliothek oder teilen Sie Code mit einer WPF-App. Es ist trivial, sich viele solcher Szenarien vorzustellen, und ich hoffe, wir haben einfach falsch verstanden, was vor sich geht.

Wir sind derzeit auf AspNetCore 1.1.1 – dh dem „aktuellen“ Support-Zweig. Wenn wir aufgrund von Abhängigkeiten von Net4XX nicht zu 2.0 wechseln können, bedeutet das, dass wir nicht mehr unterstützt werden, wenn 2.0 + 3 Monate fallen?

Wir verwenden eine Kombination aus WPF und ASP.NET Core und zielen in beiden Fällen auf das vollständige Framework ab.
Also schätze ich kein 2.0 in absehbarer Zeit?

Aber Full Framework 4.6.1 wird netstandard 2 unterstützen? übersehe ich etwas? (https://docs.microsoft.com/en-us/dotnet/articles/standard/library)

ist das nicht, dass die aktuellen Werkzeuge nicht aktualisiert werden?

es wäre völlig in Ordnung und es wäre zu erwarten, dass asp.net core auf net standard 2 läuft. das alarmierende ist diese aussicht, auf net core app2.0 umzusteigen, was bedeuten würde, dass kein älterer code innerhalb von asp.net verwendet werden könnte Kern-Websites

oh, das ist ein Problem. Ich nehme an, dass es ein wenig durch die Compat-Shims in netcore2 gemildert wird, mit denen Sie auf alte Assemblies verweisen können, aber dennoch bedeutet es, alle Projekte auf das neue Projektsystem zu portieren und eine Menge anderer Arbeit.

Wäre schön zu hören, wie die Teams dazu argumentieren

oh, Sie denken also, dass netcoreapp2.0-Projekte dank der Typenvereinheitlichung einfach in der Lage sein werden, auf netfx-Bibliotheken zu verweisen? das würde einiges erklären. Meine Frage, wenn ja, ist, wie viel Code tatsächlich funktioniert, wenn er unter Windows, aber auf der Kern-CLR ausgeführt wird.

Beeindruckend. Dies würde uns total blockieren und im Grunde sicherstellen, dass wir diese Pakete auf absehbare Zeit niemals aktualisieren könnten. Möglicherweise müssen wir sogar unser MvcCore-Projekt zurück auf Mvc migrieren, da wir derzeit nicht um die Ausrichtung auf net462+ herumkommen.

Darauf bin ich auch sehr gespannt. Ich hoffe wirklich, dass dies in einem Zwischenschritt (und kurzlebigen) oder einem großen Missverständnis liegt. Es wäre sicherlich auch ein Hindernis für die Akzeptanz der meisten unserer Anwendungen.

Alles auf Core zu verschieben ist einfach zu viel für eine große vorhandene Codebasis (ohne Entwickler daran zu hindern), die Umstellung auf die neuen ASP.NET-Klassen (HttpRequest, Controller usw.) als Zwischenschritt muss für unsere Hauptprojekte erfolgen.

Vielleicht können @DamianEdwards oder @davidfowl die Pläne hier kommentieren? Ich habe auch Probleme, zusätzliche Argumente zu finden.

Ich kann verstehen, warum dies zunächst ein beängstigender WTF-Moment ist. Lassen Sie mich erklären, weil es weniger ausgeflippt ist, als es scheint.

  • Sie haben gesagt, dass .NET-Kunden zusammenarbeiten müssen. Völlig einverstanden.

    • Wir können Netstandard-Bibliotheken zwischen ASP.NET Core 2.0 und ÜBERALL teilen.

    • Aufgrund von Typeforwarding und netstandard20 können wir sogar auf viele net461+-Assemblys von ASP.NET Core 2.0 verweisen

  • Sie sagten, WebApps müssen möglicherweise Folgendes verwenden:

    • AD – Insgesamt ist dies eine Lücke, wenn Sie LDAP direkt aufrufen möchten. Sie können sich sicherlich JETZT gegen Windows Auth authentifizieren. Wir planen, um den Sommer herum speziell den DirectoryServices-Namespace für Core 2.0 zu haben

    • Zeichnen – Das ist absolut eine Lücke. Wir planen, dies für Core 2.0 im Sommerzeitraum zu haben. Bis dahin existieren diese Netzstandard-Optionen auch ImageSharp, ImageResizer, Mono-Optionen usw

    • COM-Automatisierung – Dies war unter Core 2.0 noch nie möglich, aber Sie können sicherlich PInvoke verwenden, wenn Sie sich verletzen möchten. Sie können WebAPI auch für einen net461+-Prozess lokalisieren, wenn Sie sich wirklich verletzen wollen.

    • Code mit WFP-Apps teilen – JA. Mit netstandard2.0 durchaus möglich.

  • Dies ist eine seltsame Änderung.

    • Fühlt sich so an, aber…

Denken Sie so darüber nach. WPF ist nicht netstandard2.0, es weiß, dass es auf net461+ ist und das ist in Ordnung. Es ist optimiert, kann aber auf Netstandard-Bibliotheken verweisen. ASP.NET Core 2.0 ist für Core 2.0 optimiert, kann aber auf gemeinsam genutzte Bibliotheken verweisen. Xamarin ist das gleiche.

.NET Core ist Seite an Seite und entwickelt sich schnell. Es ist VIEL schneller als .NET (Full) Framework bewegen kann, was gut ist. Durch den Aufbau von ASP.NET Core 2.0 auf .NET Core 2.0 (was, wie Sie sich erinnern, ein SUPERSET von .NET Standard ist), bedeutet dies, dass Dinge schneller als NetFx oder sogar Netstandard erstellt werden können.

NetCore > Net Standard > NetFx, wenn es um Entwicklungsgeschwindigkeit und Innovation geht.

Punkt ist, wenn Sie neue Arbeiten machen, netstandard20. Wenn Sie über ältere net461+-Bibliotheken verfügen, können die meisten davon unter ASP.NET Core 2.0 referenziert werden.

ASP.NET Core 1.1, das auf .NET Framework ausgeführt wird, wird nach der Veröffentlichung von 2.0 ein Jahr lang vollständig unterstützt. Diese Workload wird bis mindestens Juli 2018 vollständig unterstützt.

Die verbleibenden großen Lücken, die in .NET Core 2 fehlen, sind System.DirectoryServices und System.Drawing. Wir arbeiten an einem Windows-Kompatibilitätspaket, das beide in diesem Sommer auf .NET Core unter Windows ermöglichen würde.

Was wir von Ihnen allen brauchen, ist eine klare Liste/ein Verständnis dafür, WARUM Sie denken, dass Sie ASP.NET Core 2.0 benötigen, um auf net461+ zu laufen.

Ich dachte, bei .NET Standard 2.0 dreht sich alles um Kompatibilität und Interoperabilität, die die Lücke zwischen .NET Core und .NET fx schließt, auf die alle warten – das scheint das zu beenden.

Aus irgendeinem Grund wird es viele Kunden geben, die Abhängigkeiten haben, die .NET 4.x erfordern, sei es benutzerdefinierte externe Abhängigkeiten, kommerzielle Komponenten, Legacy-Lib-Abhängigkeiten usw.

Ist es beabsichtigt, dass Kunden keine ASP.NET Core 2.0-Apps erstellen können, die auf Desktop CLR ausgeführt werden, damit sie auf ihre vorhandenen .NET 4.x-Deps verweisen können?

@shanselman Danke für die Antwort - viele gute Beispiele drin.

Ein Follow-up über Bibliotheken:
Bleiben alle Abstraktionsbibliotheken crosskompiliert? Wenn ich beispielsweise HttpRequest verwende, wäre es etwas, 1.x- und 2.x-Builds auf der Version von ASP.NET Core zu verwalten, die Sie verwenden (die jetzt zumindest sauber einem TFM zugeordnet sind). Ich würde es vorziehen , zu vermeiden ... also hoffe ich, dass die Abstraktionen auf netstandard bleiben. Ist das der allgemeine Plan?

Wir pflegen bereits mehrere Varianten für Dinge, die von ASP.NET/MVC abhängen, weil System.Web 's HttpRequest völlig anders ist, also ist das eine ganz andere Bibliothek (z. B. MiniProfiler vs . MiniProfiler.AspNetCore ). Ich möchte nur sicherstellen, dass wir die Anzahl der Varianten im Hinterkopf behalten, die wir für die Wartung von Bibliotheksautoren laden, wenn sich ihre Abhängigkeiten von netstandard entfernen ... und hoffentlich diese Kopfschmerzen alle zusammen vermeiden.

Ich bin sehr froh, dass dies nicht so eine große Sache zu sein scheint, wie es scheint, danke für die detaillierte Klärung.

Ich habe zwei Fragen/Bedenken:

  • Es hört sich so an, als ob die Verwendung von .NET Framework-Bibliotheken von ASP.NET Core nur minimale Reibungsverluste aufweisen sollte. Das ist großartig! Was ist andersherum? Es gibt wahrscheinlich .NET Framework- oder Netstandard-Bibliotheken und -Anwendungen, die Teile oder Komponenten von Mvc und anderen unterstützenden ASP.NET Core-Bibliotheken einbetten (ich weiß, weil ich ein paar habe). Die gehen kaputt, richtig? Gibt es Tipps, wie man dieses Szenario umgehen kann? Wenn Netstandard-Bibliotheken keine ASP.NET Core-Bibliotheken mehr nutzen können, scheint das eine große Sache für eingebettete ASP.NET Core-Szenarien zu sein.

  • Aus einer nicht-technischen Perspektive scheint dies eine Menge Verwirrung stiften zu können. Abgesehen von den Leuten, die auf GitHub aktiv sind, auf Twitter mitmachen usw. gibt es bereits eine große Verwirrung um die verschiedenen Plattformen usw. Ich sehe Entwickler, die nur teilweise mitgemacht haben oder die gerade aufstehen sehr frustriert, wenn sie ASP.NET Core verwenden (vielleicht nach einem veralteten Tutorial) und es nicht auf ihren .NET Framework-Plattformen zum Laufen bringen können. Nicht sicher, was, wenn überhaupt, dagegen getan werden kann.

Aufgrund von Typeforwarding und netstandard20 können wir sogar auf viele net461+-Assemblys von ASP.NET Core 2.0 verweisen

Leider bedeutet dies nicht, dass eine Bibliothek, die für das vollständige Framework kompiliert und entworfen wurde, auf .NET Core funktioniert (das Risiko ist hoch, dass Dinge zur Laufzeit explodieren!).

Viele der „alten“ APIs, die in .NET Core 2.0 wieder eingeführt wurden, sind Stubs, die niemals (funktional) funktionieren werden. Ganz zu schweigen davon, dass noch viele APIs fehlen und sogar ganze Bereiche, die bewusst aus .NET Core ausgeschlossen wurden (IdentityModel, WCF-Server, Remoting, vollständige AppDomain-Unterstützung usw.)

Der Versuch, Leute davon zu überzeugen, dass sie ihre ASP.NET Core 1.0 mit .NET Desktop-Apps „sicher“ auf ASP.NET Core 2.0 mit .NET Core migrieren können, ist meiner Meinung nach eine Lüge.

.NET Core ist Seite an Seite und entwickelt sich schnell. Es ist VIEL schneller als .NET (Full) Framework bewegen kann, was gut ist. Durch den Aufbau von ASP.NET Core 2.0 auf .NET Core 2.0 (was, wie Sie sich erinnern, ein SUPERSET von .NET Standard ist), bedeutet dies, dass Dinge schneller als NetFx oder sogar Netstandard erstellt werden können.

Ich glaube nicht, dass (die meisten) Leute danach suchen. Viele Leute brauchen keine schnelllebigen Bibliotheken, sie brauchen stabile Sachen , die sich elegant in ihre älteren Sachen integrieren lassen, ohne das Risiko einzugehen, alles kaputt zu machen.

@daveaglick

  • Richtig, dass es keine implizite Möglichkeit gibt, auf netcoreapp2.0 von net461 oder sogar netstandard2.0 zu verweisen. Die Brücke geht in eine Richtung. Sie können es immer umgehen, indem Sie TFMs für Paket-Fallback angeben, aber das ist offensichtlich eine Notlösung, kein unterstütztes Szenario (obwohl es ausreichen wird, um viele Leute zu entsperren). Es ist eine nicht triviale Menge an Arbeit für uns, Subsysteme von ASP.NET Core außerhalb des größeren Stacks zu unterstützen (was das Targeting netstandard impliziert).
  • Das Verwechslungspotential geht in beide Richtungen. Beispielsweise haben wir viele Rückmeldungen erhalten, dass die Tatsache, dass „ASP.NET Core“ auf .NET Framework (das nicht .NET Core ist) ausgeführt werden kann, verwirrend ist. Durch diese Änderung wird ASP.NET Core effektiv Teil des .NET Core-Stacks, d. h. wenn Sie ASP.NET Core verwenden, verwenden Sie .NET Core.

@shanselman Übrigens , du hast nicht gesagt, warum Cross-Compilation keine Option war. ASP.NET Core-Komponenten, die von netcoreapp2.0 -only APIs profitieren könnten, könnten sowohl net46 / netstandard1.x / netstandard2.0 als auch netcoreapp2.0 TFMs haben und Machen Sie die neuen coolen/schnellen Sachen nur für .NET Core.

@NickCraver derzeit sieht der Plan nicht vor, die *.Abstractions-Pakete zu verlassen, die auf netstandard abzielen. Die Trennung ist einfach nicht so sauber wie auf der ganzen Linie. Für die Zwecke von jemandem, der eine Migration versucht, wie Sie sie vorschlagen, sollte Sie die Verwendung von Paketziel-Fallback trotzdem dorthin bringen (aber ich verstehe Sie möglicherweise falsch).

Auch Ihre Aussage zur sauberen TFM-Aufteilung ist richtig und stellt einen Vorteil dieses Plans dar, da ein einzelnes Paket jetzt ASP.NET Core 1.x und 2.0+ gleichzeitig unter Verwendung des TFM als Drehpunkt anvisieren kann.

Ich spiele mit dem Gedanken an "Mixed Applications". B. eine WPF-Anwendung, die eine Web-API verfügbar macht, oder ein Server, der sowohl eine REST-API als auch WCF-Endpunkte anbietet (dies kann für die Kompatibilität mit früheren Clients dienen). Diese Szenarien werden mit dieser Änderung unmöglich gemacht und machen ASP.NET Core nur für neue Anwendungen geeignet, anstatt „nur eine Bibliothek“ zu sein.

@PinpointTownes Wie @shanselman sagte, sind wir sehr an den spezifischen Anforderungen und Hindernissen interessiert, die Kunden haben, wenn es darum geht, weiterhin direkt auf .NET Framework abzuzielen. Unsere bisherige Arbeit mit Kunden in diesem Boot hat gezeigt, dass System.DirectoryServices und System.Drawing und die Blocker Nr. 1 und 2 sind, und wir haben einen Plan, das anzugehen. Darüber hinaus sehen wir uns das Feedback an und bewerten es.

Cross-Compiling ist ein Mehraufwand, der mit den Kunden- und Produktanforderungen in Einklang gebracht werden muss. Aus diesem Grund möchten wir dieses Feedback erhalten, damit wir konkreter definieren können, wie die Landschaft sowohl für unsere Kunden als auch für uns aussieht, während wir ASP.NET Core weiterentwickeln.

@DamianEdwards Danke für die weitere Klarstellung. Die Netstandard -> ASP.NET Core-Bibliotheken sind für mich eine große Sache. Ich bette Kestrel (das anscheinend auch auf Netcoreapp umgestellt wird) in mehrere Netstandard-Bibliotheken ein. Ich bette Razor auch an mehreren Stellen ein, und ich weiß, dass Sie an der neuen, modulareren Version arbeiten, aber wenn das auch nur auf netcoreapp abzielt, wird es weh tun. Es gibt auch Unmengen von Bibliotheken, die „Teil“ von ASP.NET Core sind, aber außerhalb davon viel Nutzen haben.

Mit anderen Worten, ich mache mir viel mehr Sorgen darüber, Netstandard-Bibliotheken die Möglichkeit zu nehmen, ASP.NET Core-Pakete zu nutzen, als mich um das Gegenteil zu kümmern. Es scheint, als ob dadurch eine ganze Klasse von Anwendungsfällen aus der Betrachtung genommen wird.

@daveaglick Razor selbst (die Engine) wird weiterhin auf netstandard abzielen. Auch hier ist die Unterstützung bestimmter Subsysteme eines großen komplexen Graphen (wie ASP.NET Core 2.0) auf verschiedenen Plattformen mit Kosten verbunden. Für Dinge wie das Einbetten gibt es andere Optionen (Quelleinbettung, Kopieren usw.), aber natürlich haben sie ihre eigenen Kompromisse.

Hören Sie auf jeden Fall auf die verschiedenen Klassen von Anwendungsfällen, wir haben in der Tat unterschiedliche Kundengruppen zu berücksichtigen, wenn wir einen Stack wie den unseren entwerfen und versenden.

Ich teile die Bedenken von @daveaglick hier: ASP.NET Core möchte die neuesten APIs verwenden, ist völlig verständlich, aber für alles andere Downstream wird es etwas chaotischer, wenn dasselbe erforderlich ist. Sie haben keine Wahl nach 1.0 von Stable oder Upgrade, Sie sind auf dem schnellsten verfügbaren Zug mit netcoreapp2.0 und das ist die einzige Wahl. Wenn nicht alle Bits (selbst die grundlegenden Abstraktionen) konsumiert werden können, ohne dass die Benutzer netcoreapp2.0 verbrauchen, bedeutet das, dass es effektiv kein netstandard2.0 für diese gesamte Reihe von Bibliotheken gibt ... und für alle das hängt von ihnen ab.

Ich bringe den Kernanwendungsstapel in Bewegung, aber ich bin nicht unbedingt damit einverstanden, dass sich insbesondere die Abstraktionen bewegen. Einer der Hauptpunkte der Abstraktionen war es, zumindest aus meiner Sicht als Verbraucher, eine solche enge Kopplung zu vermeiden. Ich wäre sehr gespannt auf einige Beispiele, bei denen netstandard2.0 nicht über die dafür erforderlichen APIs verfügt, netcoreapp2.0 jedoch schon. Gibt es da draußen einige Beispiele? Geht es hauptsächlich um neue Arten von Methodenparametern? Ich bezweifle nicht, dass es reichlich Argumente gibt, ich bin nur sehr neugierig - Beispiele zu sehen, würde helfen, die Wartungskosten zu zeigen, zu denen wir täglich nicht annähernd so viel Einblick haben.

Der Kestrel-Fall ist komplizierter, aber ich sehe sicherlich die Argumente dafür, ihn auf dem neuesten API-Set zu haben. Ich könnte mir vorstellen, dass angesichts der Arbeit, die es vorantreibt, ständig neue APIs für Kestrel erstellt werden.

@PinpointTownes Wie @shanselman sagte, sind wir sehr an den spezifischen Anforderungen und Hindernissen interessiert, die Kunden haben, wenn es darum geht, weiterhin direkt auf .NET Framework abzuzielen.

Als Berater habe ich einer Reihe von Kunden geholfen, ihre Apps auf ASP.NET Core zu verschieben, und ich musste oft auf .NET Desktop abzielen, um Bibliotheken von Drittanbietern (Closed Source) abhängig von IdentityModel / WCF oder auf Basis von AppDomain verwenden zu können Unterstützung.

Diese Dinge nicht in ASP.NET Core 2.0 zu haben, wäre ein großes Hindernis für sie.

Es gibt auch Bibliotheken, die unter .NET Core nicht funktionieren würden, selbst wenn die APIs vorhanden wären, da sie funktional anders wären. Hier ist ein konkreter Fall, den ich schon oft gesehen habe:

Auf .NET Core gibt RSA.Create() eine RSACng -Instanz unter Windows zurück, aber auf .NET Desktop wird eine RSACryptoServiceProvider -Instanz zurückgegeben. Viele Bibliotheken – einschließlich der BLC selbst – versuchen jedoch, RSA in RSACryptoServiceProvider , was unter .NET Core immer fehlschlägt, da RSACng nicht in RSACryptoServiceProvider umgewandelt werden kann

@NickCraver welche Abstraktionen insbesondere? Das Problem beim Verschieben nur der Abstraktionen besteht darin, dass Sie als Nächstes alles wollen, was auf diesen Abstraktionen aufbaut (es sei denn, Sie sagen wörtlich, dass Sie nur Microsoft.AspNetCore.Http.Abstractions und nichts anderes benötigen).

@davidfowl Ja , nur die Abstraktionen: zB HTTP, Hosting, HTML und Protokollierung. Es sieht so aus, als ob Microsoft.Extensions.* durch frühere Kommentare abgedeckt sind, was die meisten davon sind. Das sind die, mit denen ich mich heute austausche.

Für ein konkretes Beispiel: Die MiniProfiler Middleware antwortet nur auf Abstraktionen ( Link )

Wenn Sie MVC und dergleichen zusätzlich verwenden, dann sind Sie sowieso auf netcoreapp2.0 , und das ist es (und meiner Meinung nach ist das in Ordnung). Aber derzeit habe ich die Freiheit, APIs logisch aufzuteilen, wo sie geteilt werden, und das ganz einfach, weil sie Abstraktionen sind. Ich bin ein großer Fan der aktuellen Aufteilung, bitte sperrt das nicht unnötig.

Heh. Als Berater habe ich definitiv die Frage „Was? ASP.NET Core läuft auf dem Desktop .NET Framework!?“ gehört. Frage ziemlich oft. Dass „ASP.NET Core“ wörtlich „.NET Core“ im Namen trägt, ist wirklich schade.

Wie auch immer ... So wie ich ein Fan davon war, veraltete/legacy/kaputte APIs zu löschen, als .NET Core gestartet wurde (ein „neuer“ Start), bin ich auch ein Fan dieser Änderung, um ein schnelleres, schlankeres Framework zu erhalten mit mehr Features und einer höheren Innovationsrate.

Abgesehen davon habe ich auch Verständnis für alle Entwickler da draußen, die aus irgendeinem Grund ihren gesamten Code nicht vor Juni nächsten Jahres auf .NET Core migrieren können.

Dazu gehört mein aktueller Client, der über eine wahnsinnig große Legacy-Bibliothek/Framework verfügt, die auf .NET Framework abzielt und von mehreren ASP.NET Core-Projekten genutzt wird, die derzeit parallel entwickelt werden. Wenn diese Systeme in Produktion gehen, wird es wenig bis gar keine Zeit geben, um entweder a) alles auf .NET Core zu portieren oder b) alles auf das vollständige ASP.NET-Framework zu verschieben, bevor ASP.NET Core 1.x nicht mehr unterstützt wird.

Reicht hier ein Jahr Support wirklich aus? Ich kann mir vorstellen, dass es noch andere ähnliche Fälle gibt...

@khellang wie bereits erwähnt, können sie weiterhin auf Bibliotheken/Frameworks verweisen, die auf .NET Framework abzielen, und das wird gut funktionieren, vorausgesetzt, die von ihnen aufgerufenen APIs sind Teil der Schließung von netstandard2.0 . Weißt du, ob sie sich auf Dinge außerhalb dieses Raums verlassen? Dazu würden wir wirklich gerne Feedback erhalten, damit wir die Priorität der Portierung dieser APIs (wie System.DirectoryServices und System.Drawing ) einschätzen können.

Das Hosten einer Web-API (z. B. Kommunikationsschicht) oder sogar kommender asp.net-Core-Sockets wird für einen aktuellen Windows-Dienst oder eine WPF-Desktop-App unmöglich? (mit unterstützten Versionen).

Ich kann mir vorstellen, dass es eine Liste mit Dingen geben wird, die früher netstandard1.x waren und jetzt netcoreapp2.0 sind

Ich habe die Repos durchsucht und es scheint, dass MVC-spezifische Dinge netcoreapp2.0 sind, aber HttpAbstractions, Protokollierung, Konfiguration usw. sind immer noch netstandard Oder gibt es weitere Änderungen?

@NickCraver Ich sehe, dass Sie Erweiterungen verwenden, aber immer noch System.Web verwenden. Haben Sie Pläne, Microsoft.AspNetCore.Http.HttpContext mit System.Web.HttpContext zu shimen? Haben Sie eine Vorstellung davon, wie viel API Sie benötigen?

Wenn Sie MVC und dergleichen zusätzlich verwenden, dann sind Sie sowieso auf netcoreapp2.0, und das ist es (und meiner Meinung nach ist das in Ordnung). Aber derzeit habe ich die Freiheit, APIs logisch aufzuteilen, wo sie geteilt werden, und das ganz einfach, weil sie Abstraktionen sind. Ich bin ein großer Fan der aktuellen Aufteilung, bitte sperrt das nicht unnötig.

Ich spreche jedoch nicht von MVC, ich spreche nur von anderen Helfern, die mehr Funktionalität zusätzlich zu den zugrunde liegenden Abstraktionen bereitstellen. Der große Wert des von uns gewählten Musters „Abstraktionen“ besteht darin, dass andere Dinge darauf aufbauen können, nicht so sehr die Abstraktionen selbst. Mein Bauchgefühl sagt mir, dass wir, wenn wir die ASP.NET-Abstraktionen zum Netzstandard machen, am Ende auch die gesamte Middleware zum Netzstandard machen müssen.

@dasMulli- Windows-Dienste funktionieren, sobald wir die API portiert haben (es gibt auch Open-Source-Bibliotheken, die Windows-Dienste auf .NET Core unterstützen).

WPF-Desktop-App? (mit unterstützten Versionen).

Jawohl. Dies wird nicht mehr der Standard sein. Wir werden es mit .NET Core 2.0 nicht mehr standardmäßig unterstützen.

@davidfowl Ich bin mir nicht sicher, ob Sie sich dort die richtigen Teile angesehen haben:

verwenden aber immer noch System.Web

... wegen dieser Aufteilung nicht in denselben Bibliotheken. Um minimalen Overhead und keine Lastwagenladung von Abhängigkeiten für Verbraucher zu erreichen, gibt es MiniProfiler für ASP.NET MVC < 6 (System.Web) und MiniProfiler.AspNetCore / MiniProfiler.AspNetCore.Mvc (viele NuGet ).

Ich glaube, Sie sprechen von System.Web Überresten, die sich auf MiniProfiler.Shared – ich habe darauf gewartet, diese zu bereinigen, bis das NuGet-Problem erst letzte Nacht auf Framework-Assemblys behoben wurde. Ich habe es nur entfernt , um die Dinge zu klären.

@DamianEdwards Ich bin nicht zu 100 % bei der Schließung von netstandard2.0 , aber ich würde gerne (mit ihrer Erlaubnis) einen Portabilitätsanalyselauf durchführen und die Ergebnisse teilen. Ist Portability Analyzer noch aktuell und aktuell?

ASP.Net Core wird schnell zum neuen Python 3*; nur schlimmer. Das scheint mir ein Schritt in die falsche Richtung zu sein. Das bedeutet nur, dass eine Menge Szenarien Entwickler dazu zwingen werden, Code auf den „alten Plattformen“ für viele Jahre zu warten (und neuen zu schreiben), anstatt umzuziehen. "Schnellere Entwicklung" scheint kein sehr gutes Argument zu sein, wenn es nur bedeutet, dass Sie "schneller" an einen schlechteren/ungeeigneteren Ort gelangen.

*Ich mag Python 3, aber es ist fast ein Jahrzehnt her und die Python-Community ist immer noch zersplittert

Nur um es klar zu sagen - gibt es einen technischen Blocker (ausgefallenes Perf-Zeug) oder dient dies nur dazu, die Kosten für die Aufrechterhaltung der Kompatibilität in der Zukunft zu sparen?
Ich denke, die meisten von uns wussten, dass dieser Schritt kommen würde, aber niemand erwartete ihn so bald. Angesichts der Übergangszeit dauert es noch (wie Libs werden portiert, .net Standard 2.0 um die Ecke, aber es werden noch keine Libs dafür gebaut). - Es wäre großartig, den net*-Support für mindestens eine Version beizubehalten (z. B. 2.0, nicht 2.1).

@shanselman Ich verstehe deine Punkte und ich persönlich stimme sogar zu, aber _viele_ Leute werden es nicht so sehen.

Das Hauptproblem besteht nicht darin, net46-Assemblys vom Kern aus aufzurufen, die Compat-Shims befassen sich in den meisten Fällen damit. Das Problem ist vorhandener net46-Code und asp.net-Core-1.*-Code, der auf 46 läuft. Wie jemand erwähnte, bestand der ganze Sinn von netstandard darin, Code, einschließlich asp.net, überall laufen zu lassen, das wird sich wie ein Schritt anfühlen davon entfernt und für manche Menschen vielleicht sogar ein Scheitern dieser Vision.

Ich glaube nicht, dass das Problem darin besteht, dass die Leute nicht auf Net Core umsteigen _wollen_. Das Problem ist, dass Organisationen, Manager, CTOs und dergleichen davon überzeugt werden müssen, dass sich das Kosten-Nutzen-Verhältnis lohnt. Die Portierung ist nicht nur zeitaufwändig genug, um Lieferungen aufzufressen, sondern birgt auch das Risiko von Regressionen usw.

Mit anderen Worten, es sind nicht immer technische Gründe, die Menschen daran hindern, sich zu bewegen. Ich würde sogar sagen, dass es selten ist, _technisch_ kann fast jedes Projekt den Sprung schaffen. Aber diesen Kosten-/Lieferschein zu motivieren, das ist das Problem. Es kann ein sehr harter Verkauf sein, einer, den ich ein paar Mal machen musste. In diesen Fällen war es jedoch eine Möglichkeit, diesen Schritt voranzutreiben, wenn man sagen konnte: "Aber Sie können mit dem vollen Framework laufen".

Wenn du dich verletzen willst

Genau das ist es. Net46-Entwickler und -Management werden es nicht so sehen, sie werden es so sehen, als ob _Sie_, Microsoft, ihnen schaden wollen, um mit der neuesten Version Schritt zu halten. "Nun, bewegen Sie sich nicht", könnte man sagen, aber mit der Unterstützung von asp.net core 1.x, so kurz es auch ist, müssen sie es tun, zumindest aus der Perspektive von Managern, die dafür verantwortlich gemacht werden müssen, wenn a Fehler verursacht Ausfallzeit oder Informationsverlust. (auch wenn der Rahmen nicht verantwortlich ist)

Viele Entwickler, die wirklich auf asp.net Core 1.1 gedrängt haben, werden sich auch betrogen fühlen, dass sie jetzt ohne Core nicht auf 2.0 umsteigen können. Das mag gerechtfertigt sein oder auch nicht, aber ich sage Ihnen nur, viele Leute werden so denken, sie werden diejenigen sein, die sich vor ihren konservativeren Kollegen verantworten müssen

Spielt das eine Rolle? Wird asp.net core2/dotnet core2 deswegen „sterben“? Nein, aber es wird die Akzeptanz verlangsamen und das Ökosystem zerbrechen, und das ist imo wirklich traurig. Ich möchte, dass die Leute in der Lage sind, all diese großartigen Sachen zu nutzen, die in 2.0 kommen, und das Schneiden der Cross-Compilation auf den Netzstandard wird sich darauf auswirken. Sicherlich werden die meisten Leute, die in diesen Repos rumhängen, kein Problem haben, es sind die Entwickler von Joe und Jane und noch mehr ihr Manager, das ist das Problem.

@DamianEdwards
Ich stimme zu, dass dies eine Quelle der Verwirrung war, ich musste es viele Male erklären, aber das Ergebnis davon war immer, dass ein enttäuschter Entwickler ein aufgeregter wurde, weil sie dachten, sie könnten das neue coole Zeug nicht verwenden aber es stellte sich heraus, dass sie es konnten.

Zusammenfassend bin ich sicher, dass diese Entscheidung nicht leichtfertig getroffen wurde, aber wenn Sie dies tun müssen, müssen Sie meiner Meinung nach wirklich _wirklich_ vorsichtig mit dem Messaging sein. x auf net46 ist _super_ einfach und super ausgefeilt. Die Geschichte für die Referenzierung anderer Netstandard-Bibliotheken von net46 sowohl als Projektreferenzen als auch anderweitig muss felsenfest sein. Ich denke, Sie müssen dies explizit zeigen / ansprechen, um zu vermeiden, dass die Leute ausflippen

@khellang paging @terrajobst für die Portability Analyzer-Frage.

@hellang

Ja, wir haben gerade VSIX für 2017 aktualisiert, aber ich verwende einfach die Befehlszeilenversion von here .

@NickCraver Sicher, Sie können ein Stück Middleware schreiben, das auf netstandard abzielt, was nützt Ihnen das als Bibliotheksautor, wenn ASP.NET Core netcoreapp2.0 unterstützt.

@aL3891 tolle Zusammenfassung! Ein großes Problem, das wir in Zukunft haben, ist, wie wir neue APIs für Dinge nutzen, die auch im Netzstandard sind. .NET Core erhält neue APIs, die wir zum Implementieren neuer Funktionen benötigen (eine, die mir in den Sinn kommt, ist SSLStream ALPN-Unterstützung für HTTP2-Unterstützung in Kestrel). Man könnte also argumentieren, dass wir auf Netstandard bleiben und ständig die höchste Version verwenden (die .NET Framework noch nicht unterstützt), aber dann würden wir im selben Boot sitzen.

Ein großes Problem, das wir in Zukunft haben, ist, wie wir neue APIs für Dinge nutzen, die auch im Netzstandard sind. .NET Core erhält neue APIs, die wir zum Implementieren neuer Funktionen benötigen (eine, die mir in den Sinn kommt, ist SSLStream ALPN-Unterstützung für HTTP2-Unterstützung in Kestrel).

Laut https://github.com/dotnet/corefx/issues/4721 wird die ALPN-Unterstützung für SslStream nicht für .NET Core 2.0 bereit sein. Angenommen, dies wird schließlich einige Monate später implementiert, bedeutet das, dass man es verwenden kann, wenn man auf das netcoreapp2.0 TFM abzielt? Was passiert in diesem Fall, wenn ich mich entscheide, eine netcoreapp2.0 basierende Bibliothek zu veröffentlichen, die neue APIs verwendet, die nicht Teil der ursprünglichen netcoreapp2.0 -Form waren, wenn meine Benutzer eine ältere .NET Core-Laufzeit verwenden ? Wird es abstürzen? Oder wird netcoreapp2.x an netstandard1.x ausgerichtet, dessen Vertrag nicht geändert werden kann, ohne die TFM-Version zu erhöhen?

@davidfowl für andere Implementierungen von Teilen des Stacks und Tests. Und weil mit der Art und Weise, wie Abstraktionen (kein MVC erfordern) eine anständige Aufteilung zwischen 2 Bibliotheken sind, anstatt "anzunehmen, dass jeder MVC hat und alle Abhängigkeiten will".

Wenn die Abstraktionen eigentlich keine Abstraktionen sind und so eng mit ASP.NET Core selbst gekoppelt sind, warum entfernen wir diese Pakete dann nicht einfach? Es ist eine ehrliche Frage, denn das würde das Leben einfacher und klarer machen, wenn das das übergeordnete Ziel der Beziehung ist. Ich versuche zu verstehen, warum es Sinn macht, Abstraktionen als separate Pakete zu haben, wenn sie effektiv an eine einfache Implementierung/Verwendung gebunden sind. Ich würde behaupten, dass niemand außerhalb von Microsoft die Ressourcen haben möchte oder hat, um einem konkurrierenden netcoreapp2.x -Webserver zu widmen (gerne, dort korrigiert zu werden!).

Können Sie erklären, welchen Sinn die Abstraktionen in einer netcoreapp2.x -Welt haben würden? Oder ob es Pläne gibt, sie in 2.0 einfach abzuschaffen?

Laut dotnet/corefx#4721 wird die ALPN-Unterstützung für SslStream nicht für .NET Core 2.0 bereit sein. Angenommen, dies wird schließlich ein paar Monate später implementiert, bedeutet das, dass man es verwenden kann, wenn man auf die netcoreapp2.0-TFM abzielt? Was passiert in diesem Fall, wenn ich mich entscheide, eine netcoreapp2.0-basierte Bibliothek zu veröffentlichen, die neue APIs verwendet, die nicht Teil der ursprünglichen netcoreapp2.0-Form waren, wenn meine Benutzer eine ältere .NET Core-Laufzeit verwenden? Wird es abstürzen? Oder wird netcoreapp2.x an netstandard1.x angeglichen, dessen Vertrag nicht geändert werden kann, ohne die TFM-Version zu erhöhen?

ASP.NET Version x wird einfach an .NET Core Version x ausgerichtet. Das TFM wird aktualisiert, um es an jede Version von .NET Core anzupassen. Es ist ein einzelnes Produkt, das endlich als solches behandelt werden kann. Das ist eine der wichtigsten Vereinfachungen, die wir vornehmen, wie @DamianEdwards oben erwähnt hat. Wir werden Leute, die Bibliotheken erstellen, nicht unterbrechen, indem wir neue APIs im Kern hinzufügen, ohne das TFM zu ändern.

@ Nick Craver

für andere Implementierungen eines beliebigen Teils des Stapels und zum Testen.

Welche anderen Implementierungen? Gibt es andere Teile des Stacks, die ASP.NET Core implementieren?

Wenn die Abstraktionen eigentlich keine Abstraktionen sind und so eng mit ASP.NET Core selbst gekoppelt sind, warum entfernen wir diese Pakete dann nicht einfach? Es ist eine ehrliche Frage, denn das würde das Leben einfacher und klarer machen, wenn das das übergeordnete Ziel der Beziehung ist. Ich versuche zu verstehen, warum es Sinn macht, Abstraktionen als separate Pakete zu haben, wenn sie effektiv an eine einfache Implementierung/Verwendung gebunden sind. Ich würde postulieren, dass niemand außerhalb von Microsoft die Ressourcen haben möchte oder hat, um einem konkurrierenden netcoreapp2.x-Webserver zu widmen (glücklich, dort korrigiert zu werden!).

Können Sie erklären, welchen Sinn die Abstraktionen in einer netcoreapp2.x-Welt haben würden? Oder ob es Pläne gibt, sie in 2.0 einfach abzuschaffen?

Wir könnten alles in eine einzige Assembly packen, aber das Refactoring ermöglicht uns eine zukünftige Flexibilität, die wir sonst nicht hätten, wenn wir dies tun würden. Es eröffnet sogar die Möglichkeit, andere Implementierungen zu haben, und schließt dies langfristig nicht wirklich aus.

Einfach ausgedrückt geht es bei Abstraktionen darum, die Anzahl der Abhängigkeiten zu verringern, nicht um Plattformportabilität.

Wir werden Leute, die Bibliotheken erstellen, nicht unterbrechen, indem wir neue APIs im Kern hinzufügen, ohne das TFM zu ändern.

Sie sagten, dass Sie sich für netcoreapp2.0 entscheiden wollten – nur weil es sich schneller bewegte – im Vergleich zu .NET Desktop und damit zu .NET Standard – aber was bringt es, statt auf netcoreapp2.0 zu zielen netstandard2.0 wenn Sie nicht von den neuen .NET Core-APIs profitieren können, ohne das TFM zu ändern? (zB netcoreapp2.1 )

Sie sagten, dass Sie sich für netcoreapp2.0-only entscheiden wollten, da es sich schneller bewegte - im Vergleich zu .NET Desktop und damit zu .NET Standard -, aber was bringt es, netcoreapp2.0 anstelle von netstandard2.0 ins Visier zu nehmen, wenn Sie können Sie können nicht von neuen .NET Core-APIs profitieren, ohne das TFM zu ändern? (zB netcoreapp2.1)

Tut mir leid, ich habe mich falsch ausgedrückt, ich meine netcoreapp2.x nicht netcoreapp2.0 .

Okay, ich bin jetzt total verwirrt.

image

Entschuldigung, ich habe mich falsch ausgedrückt, ich meine netcoreapp2.x, nicht netcoreapp2.0.

Ich bin mir nicht sicher ob ich das verstehe. Meinen Sie damit, dass es eine Äquivalenz zwischen den ASP.NET Core 2.1-Paketen und dem netcoreapp2.1 TFM geben wird?

Meinen Sie damit, dass es eine Äquivalenz zwischen den ASP.NET Core 2.1-Paketen und dem netcoreapp2.1-TFM geben wird?

Ja. Stellen Sie sich die 2 als ein und dasselbe vor. Siehe https://github.com/aspnet/Home/issues/2022#issuecomment -299544884

Was hindert Sie also daran, ein ähnliches Muster anzunehmen, aber mit netstandard ? Meiner Meinung nach wäre dies der beste Ansatz: Neue APIs könnten über neue TFMs übernommen werden, und Personen, die .NET Desktop unterstützen müssen, könnten ihre ASP.NET Core-Apps weiterhin auf dem vollständigen Framework ausführen.

ASP.NET Core 2.1/.NET Core 2.1/.NET Desktop 4.7.1 -> netstandard2.1
ASP.NET Core 2.2/.NET Core 2.2/.NET Desktop 4.8 -> netstandard2.2 .

@PinpointTownes, da .NET Framework auf dem Desktop nicht schnell genug ausgeliefert werden kann, ist dies der Kern der meisten Versionsprobleme mit Core. Es ist ein schwieriges Problem in einer riesigen Kette.

.NET Standard bewegt sich nicht mit der gleichen Geschwindigkeit wie .NET Core. In Wirklichkeit nicht annähernd so weit. Eine Verschiebung in .NET Standard lässt im Wesentlichen alle Plattformen hinter sich, bis sie aufholen, und .NET Framework ist sowohl die langsamste als auch die größte.

Point Token, obwohl ich nicht sicher bin, wie schnell .NET Framework ausgeliefert werden soll (z. B. wurden die neuen ECDSA-APIs in weniger als einem Jahr von CoreFX auf NetFX portiert, was für solch sensible Kryptokomponenten ein angemessener Zeitrahmen zu sein scheint ).

Cross-Compiling ist ein Mehraufwand, der mit den Kunden- und Produktanforderungen in Einklang gebracht werden muss.

Wenn Sie eine Minute Zeit haben, würde ich gerne mehr über die genaue Art des Overheads erfahren, der durch die Cross-Kompilierung verursacht wird. Danke.

Was wir von Ihnen allen brauchen, ist eine klare Liste/ein Verständnis dafür, WARUM Sie denken, dass Sie ASP.NET Core 2.0 benötigen, um auf net461+ zu laufen. Seien Sie spezifisch, damit wir diese Lücken schließen und alle erfolgreich sein lassen können.

Im Moment benötigen wir die Fullframework-Version der WCF-Clientbibliotheken, da die netstandard / netcore -Versionen (https://github.com/dotnet/wcf) noch nicht annähernd vollständig sind.

Wenn Sie eine Minute Zeit haben, würde ich gerne mehr über die genaue Art des Overheads erfahren, der durch die Cross-Kompilierung verursacht wird. Danke.

In sehr naher Zukunft wird es eine Zeit geben, in der wir Funktionen wie die ALPN-Unterstützung für SSLStream buchstäblich nicht mehr ausfüllen können. Außerdem haben wir noch nicht einmal damit begonnen, unsere Beine zu vertreten und APIs in .NET Core hinzuzufügen, bisher waren wir damit beschäftigt, Dinge zurück zu .NET Standard und .NET Core 2.0 (dem gesamten Zweck von .NET Standard 2.0) zu portieren. . Wir werden neue APIs hinzufügen und sie schließlich am ersten Tag in ASP.NET Core nutzen.

Im Moment benötigen wir die Fullframework-Version der WCF-Client-Bibliotheken - da die netstandard / netcore-Versionen (https://github.com/dotnet/wcf) nicht annähernd vollständig sind.

@ctolkien Das ist ein Problem und der Grund, warum wir den WCF-Client überhaupt portiert haben. Weißt du, was dich blockiert? Dies ist eine gute Gelegenheit, uns bei der Priorisierung zu helfen.

@davidfowl https://github.com/dotnet/wcf/issues/8

Es könnte noch mehr geben, dies war nur die erste Hürde, die wir vor dem Übergang zum Full Framework wcf genommen haben.

In sehr naher Zukunft wird es eine Zeit geben, in der wir Funktionen wie die ALPN-Unterstützung für SSLStream buchstäblich nicht mehr ausfüllen können.

Wie ist das ein Problem? AFAICT, nein hier hat jemals gesagt, dass die .NET Desktop- und .NET Core-Varianten von ASP.NET Core exakt denselben Funktionssatz unterstützen müssen. Wenn eine Funktion auf .NET Desktop aufgrund fehlender APIs (z. B. HTTP 2/0) nicht verfügbar ist, warum machen Sie sie nicht nur auf .NET Core und werfen ein PlatformNotSupportedException aus, das dem Entwickler mitteilt, dass die Funktion, nach der er sucht, vorhanden ist Nicht verfügbar?
Es wäre viel besser, als alle ASP.NET Core-Pakete nur für .NET Core zu machen, auch wenn die meisten von ihnen wahrscheinlich keine neuen BCL-APIs verwenden werden.

@davidfowl Ich denke, eine große Angst ist, dass die Dinge nicht in netcoreapp2.3 behoben werden, sondern in netcoreapp2.4 . Wenn sich ASP.NET Core auf den schnellsten Zug konzentriert, wie lange dann mit jeder Nebenversion Liebe? Wenn wir ständig aufrüsten müssen, muss jeder Verbraucher ständig aufrüsten.

Das ist großartig, um das Neueste und Beste zu bekommen, aber es ist nicht das Beste für die meisten Unternehmen. Daher müssen wir entweder viele Versionen (jede Nebenversion) mit unseren Bibliotheken für jeden Verbraucher von ASP.NET Core verwalten (um nicht auf die neueste Version angewiesen zu sein und Schritt zu halten) oder Benutzer auf die neueste Version ziehen, um Schritt zu halten. Dies ist nicht freundlich zu Dingen wie einer validierten Umgebung.

Wenn die Abstraktionen nicht so schnell drehen müssen (Beispiele?), Wäre es vorzuziehen, sie getrennt zu haben. Auf diese Weise ziehen Sie nicht bei jedem Upgrade das gesamte Ökosystem mit. Ich denke, ich mache mir mehr Sorgen, nicht dass sie auf netcoreapp sind, sondern dass sie ständig aktualisiert werden und alles eng miteinander verbunden ist.

Wenn die Abstraktionen jede kleinere Version beibehalten und den Schmerz (um ehrlich zu sein) auf Ihre Seite verlagern, mache ich mir viel weniger Sorgen. Könnt ihr die Absichten mit Überarbeitungen hier näher erläutern?

@PinpointTownes :

warum nicht nur .NET Core verwenden und eine PlatformNotSupportedException auslösen, die dem Entwickler mitteilt, dass das gesuchte Feature nicht verfügbar ist?
Es wäre viel besser, als alle ASP.NET Core-Pakete nur für .NET Core zu machen, auch wenn die meisten von ihnen wahrscheinlich keine neuen BCL-APIs verwenden werden.

Neinoooooo, bitte nicht. Das ist ein Laufzeitfehler und ein sehr unerwünschtes Verhalten. Wir möchten so viele Zusicherungen zur Kompilierzeit haben, dass unsere Bibliotheken wie möglich funktionieren. Es gab viele Debatten darüber, das ist einfach kein guter Weg. PlatformNotSupported sollte so weit wie möglich vermieden werden.

Das ist ein Laufzeitfehler und ein sehr unerwünschtes Verhalten.

Genau das passiert mit dem Ansatz „Bringen Sie Ihre .NET Desktop-Assemblys auf .NET Core“, wenn Ihre Assemblys versuchen, eine nicht unterstützte API zu verwenden, außer dass Sie ein MissingMemberException anstelle von PlatformNotSupportedException erhalten

Mit meinem Ansatz könnten Sie zumindest eine bessere Tooling-Story mit Dingen wie Roslyn-Analysatoren definieren, die zur Kompilierzeit feststellen könnten, ob die von Ihnen verwendeten APIs unterstützt werden oder nicht.

Und übrigens, ein PlatformNotSupported zu werfen, wäre wirklich ein Eckfall. Bei der Cross-Kompilierung wäre die beste Option, die nicht unterstützten APIs einfach aus dem öffentlichen Vertrag auszuschließen.

@PinpointTownes Das dachte ich auch, aber die Realität ist, dass neue Plattformen ausgeliefert werden und es einfach nicht so einfach ist. Nachdem ich das viele Male diskutiert habe, hat sich meine Meinung darüber, wie man hier Kompatibilität macht, stark geändert. Wenn Sie sich für die Richtung netcoreapp entscheiden, können Fixes in Nebenversionen ausgeliefert werden. Wenn Sie in die andere Richtung gehen, müssen Sie auf .NET Desktop warten, um Fixes zu liefern, was … viel Glück. Das ist ein sehr langsames Vehikel für Vorsätze.

AFAICT, nein hier hat jemals gesagt, dass die .NET Desktop- und .NET Core-Varianten von ASP.NET Core exakt denselben Funktionssatz unterstützen müssen. Wenn eine Funktion auf .NET Desktop aufgrund fehlender APIs (z. B. HTTP 2/0) nicht verfügbar ist, warum machen Sie sie nicht nur auf .NET Core

Die erste Hälfte davon ist netstandard . Die Differenzierung zu netcoreapp ist genau das, was sie hier tun. Ohne die gewollten Ausnahmen. Es ist ein richtiger Vertrag auf dieser Route.

Sie wollen in die Richtung dessen gehen, was schneller behoben und verbessert werden kann, wenn es um Lücken geht, nicht umgekehrt. „PlatformNotSupported“-Ausnahmen können morgen in der Bibliothek behoben werden, anstatt darauf zu warten, dass die Plattform in 3 Monaten aktualisiert wird. .NET Core kann sie schneller unterstützen, da der eigentliche Code damit geliefert wird und die meiste Zeit nicht separat als Weiterleitungen.

[@PinpointTownes] Wenn eine Funktion auf .NET Desktop aufgrund fehlender APIs (z. B. HTTP 2/0) nicht verfügbar ist, warum machen Sie sie nicht nur auf .NET Core und werfen ein PlatformNotSupportedException aus, das dem Entwickler mitteilt, dass die Funktion vorhanden ist er sucht ist nicht verfügbar?

Wir müssen die Einfachheit der API-Oberfläche und -Reichweite mit der Entwicklerproduktivität in Einklang bringen. Bisher haben wir hauptsächlich PlatformNotSupportedException verwendet, um eine API-Oberfläche bereitzustellen, die mit der Vergangenheit kompatibel ist. Wir beabsichtigen nicht, PlatformNotSupportedException zu verwenden, um in Zukunft disjunkte Feature-Sets bereitzustellen. Stattdessen stellen wir entweder die Unterstützung für Versionen der .NET-Plattformen ein, die nicht über die Funktionen verfügen, oder stellen die Funktion als unabhängiges NuGet-Paket bereit, das selbst nicht überall unterstützt wird.

Wenn Sie sich an die netcoreapp-Richtung halten, können Fixes in Nebenversionen ausgeliefert werden.

Wie unterscheidet sich das vom 1.0-Ansatz? @davidfowl sagte, dass neue APIs neue TFMs erfordern würden, was bedeutet, dass Sie sich von LTS abmelden müssen, um Korrekturen zu erhalten, die auf neuen .NET Core-APIs basieren. Keine wirklich ideale Situation.

Die Differenzierung zu netcoreapp ist genau das, was sie hier tun.

Differenzieren ist völlig in Ordnung, und ich stimme definitiv zu, dass .NET Core das bevorzugte Ziel für ASP.NET Core sein sollte. Das bedeutet jedoch nicht, dass .NET Desktop vollständig aufgegeben werden muss, insbesondere wenn Alternativen wie die Cross-Kompilierung vorhanden sind.

Wir müssen die Einfachheit der API-Oberfläche und -Reichweite mit der Entwicklerproduktivität in Einklang bringen.

Sicher. Sie müssen dies jedoch auch mit der Tatsache in Einklang bringen, dass Legacy-Bibliotheken – die für .NET Desktop entwickelt wurden und Funktionen verwenden, die in .NET Core nicht verfügbar sind – in ASP.NET Core 2.0 genauso gut funktionieren sollten wie in 1.0.

Stattdessen stellen wir entweder die Unterstützung für Versionen der .NET-Plattformen ein, die nicht über die Funktionen verfügen, oder stellen die Funktion als unabhängiges NuGet-Paket bereit, das selbst nicht überall unterstützt wird.

Das ist theoretisch völlig in Ordnung. Aber die Plattform, der derzeit wichtige Funktionen fehlen, ist .NET Core, nicht .NET Desktop. Dies wird sich wahrscheinlich in ein paar Jahren ändern, aber sicher ist, dass die Leute immer noch fehlende Funktionen in .NET Core 2.0 finden werden.

Könnte es sich lohnen, ein forward-port Repo in dotnet zu haben, wo Leute API-Anfragen für bestimmte Elemente stellen können, die ihrer Meinung nach in .NET Core von .NET Framework fehlen?

Dann können Feedback, Überprüfungen und Anleitungen außerhalb des alltäglichen Lärms der Code-Repos erfolgen? Oder ein allgemeines API-Review / Spec-Repo (ähnlich wie csharplang vs roslyn)

Auch eine gute Wahl für: "Ich habe ein Konvertierungsproblem und muss nach einem Problem im Zusammenhang mit X api suchen", während corefx dafür sehr laut ist.

[@benaadams] Könnte es sich lohnen, ein Forward-Port-Repository in dotnet zu haben, wo Benutzer API-Anfragen für bestimmte Elemente stellen können, die ihrer Meinung nach in .NET Core von .NET Framework fehlen?

Ich würde sagen, das sind einfach Probleme in CoreFx. Unser allgemeines Versprechen lautet außerdem: Wenn der Typ von .NET Framework und .NET Core gemeinsam genutzt wird, beabsichtigen wir, neu hinzugefügte Member nach .NET Framework zu portieren. In sehr seltenen Fällen ist dies möglicherweise nicht möglich, aber der Grundstein liegt darin, dass sie automatisch berücksichtigt werden.

[@benaadams] Oder ein allgemeines API-Review/Spec-Repo

Ich bin mir nicht sicher, ob es das wert ist. API-Überprüfungen sind bereits etwas schwerfällig; Das Extrahieren in ein anderes Repo scheint dies zu verstärken. Ich würde es vorziehen, CoreFx weiter zu rationalisieren, damit das Hinzufügen neuer APIs so einfach ist wie beispielsweise in ASP.NET.

Wie bereits erwähnt, können sie weiterhin auf Bibliotheken/Frameworks verweisen, die auf .NET Framework abzielen, und das wird gut funktionieren, vorausgesetzt, die von ihnen aufgerufenen APIs sind Teil der Schließung von netstandard2.0

@DamianEdwards Was ist mit den APIs, die nicht in der Schließung von netstandard2.0 enthalten sind? Die meisten Bibliotheken von Drittanbietern sind Closed Source. Woran erkenne ich, dass sich jeder Grenzfall in der Schließung von netstandard2.0 befindet?
Wie @PinpointTownes angedeutet hat, ist dies ein bisschen so, als würde man russisches Roulette spielen.

@MJomaa- Tools werden hier helfen, aber offensichtlich ist der einzige Weg, dies mit Sicherheit zu wissen, die tatsächliche Ausführung. Das unterscheidet sich eigentlich nicht von einer .NET Standard-Bibliothek, die auf einem von .NET Standard unterstützten Framework ausgeführt wird. Die vorhandenen APIs ersetzen nicht die Notwendigkeit, diese Bibliotheken zu testen. Das soll nicht heißen, dass Netstandard -Implementierungen nicht darauf abzielen, kompatibel zu sein, aber sie sind Edges, z

Dies sind APIs, die in NS 2.0, aber nicht in .NET Framework 4.6.1 vorhanden sind.

Ich wurde sehr nervös wegen dieser Änderung, aber nachdem ich den Thread gelesen habe, scheint es theoretisch in Ordnung zu sein. Wir haben 5 ASP.NET Core-Apps, davon 4 im vollständigen Framework, aber das lag hauptsächlich daran, dass wir vor allem defensiv waren und den Weg des geringsten Widerstands gingen.

Ich denke, eine Art von Tooling, das in VS integriert ist, wie der .NET Core Portability Analyzer, könnte den Entwicklern helfen, die auf Twitter/GitHub nicht auf dem neuesten Stand sind und nicht wissen, dass diese Erweiterung überhaupt existiert. Das Popup "Erweiterung vorschlagen" kommt mir in den Sinn, aber ich bin mir nicht sicher, welche Maßnahmen eine Person ergreifen würde, um dies auszulösen. Versuchen Sie vielleicht, einer ASP.NET Core 2+-App eine net46x-Bibliothek hinzuzufügen?

Dinge, die Microsoft nicht kontrollieren kann, wie der Support von Drittanbietern mit Telerik, Syncfusion usw., werden ebenfalls ein potenzieller Blocker sein, je nachdem, was sie tun.

Die Nachrichten in diesem GitHub-Thread müssen so schnell wie möglich in einen Blog-Beitrag mit einer FAQ oder ähnlichem aufgenommen werden. Ich habe das Gefühl, dass ich den Überblick über alles behalten habe, und ich war mir immer noch nicht 100% sicher, ob dies bedeutet, dass wir auf net46x-Bibliotheken verweisen können oder nicht. Ich war offensichtlich auch nicht der Einzige, der davon verwirrt war.

Um zu wiederholen, was andere gesagt haben. Ich habe mit mindestens 10 Entwicklern gesprochen, die nicht wussten, dass ASP.NET Core auf dem vollständigen Framework ausgeführt werden kann. Ich hatte die gleiche Erfahrung wie @aL3891, obwohl die Entwickler wirklich glücklich waren, dass sie ASP.NET Core auf dem vollständigen Framework ausführen konnten und ihre internen Bibliotheken einfach funktionierten. Nochmals: Die Botschaft, dass .NET Core 2.0 eine große Mehrheit von Anwendungsfällen hat, wird sehr, sehr wichtig sein. Der Artikel darüber, dass mindestens eine reine Windows-Lösung für ähnliche System.DirectoryServices in Arbeit ist, wird ebenfalls wichtig sein. Viele NET-Entwickler, mit denen ich spreche, zucken mit den Schultern, wenn sie hören, dass .NET Core plattformübergreifend ist, und kümmern sich mehr um das Funktionieren ihres vorhandenen Codes als um x-plat/perf.

Leute, das ist Müll :(
Wir haben auf ASP.NET Core aufgebaut, weil es die Möglichkeit gibt, es mit netfx zu verwenden, und wir haben Dinge gebaut, die für 5-10 Jahre gedacht waren, nicht für maximal 1 Jahr Support. Das ist die Bedeutung des Namens ASP.NET im Geschäftsleben, und das ist der Grund, warum große, sich langsam entwickelnde Organisationen es gegenüber den Flavor-of-the-Month-Frameworks wählen. Lassen Sie mich zu den konkreten Anwendungsfällen übergehen.

Ich arbeite in einer Tooling-Gruppe, die Branchenbibliotheken und Anwendungen zur internen Verwendung in einem Unternehmen und zum Verkauf an „Unternehmens“-Kunden erstellt. In unserem Fall hauptsächlich Regierungsorganisationen, aber ich bin sicher, dass Sie dasselbe aus dem Privatsektor hören werden. Wir haben interne Frameworks, die Geschäftsmuster in gemeinsame Abstraktionen codieren – denken Sie an „IDatabaseConnection“, „IEntityProvider“, „IWizardFlow“, „ICodeGenerator“ – und bauen RAD-Frontends auf diesen austauschbaren Backends auf.

In unserem Stack ist ASP.NET Core ein „Plugin“ – es ist ein HTTP-Ziel, das als Datenspeicherabstraktion und zum Hosten von Diensten usw. verwendet wird. Es ist auch ein "Frontend" - offensichtlich sind viele der LOB-Apps da draußen Websites, und es ist ein großartiges neues Framework für Webapps. Wir haben also bidirektionale Interoperabilitätsanforderungen - AN-C-Code, der auf zufällige andere Komponenten verweist, und zufälliger anderer Code, der auf AN-C verweist.

Wir sind absolute Fans von Core CLR und Portabilität, und wir haben eine Reihe unserer Komponenten auf Ziel- oder Multiziel-Netzstandard portiert. Wir haben bisher eine App, die auf Linux gehostet wird, und hoffen, dass weitere folgen werden. Es gibt jedoch keine Möglichkeit, dass in absehbarer Zeit alles portiert wird! Wir haben immer noch aktiven, aktiv entwickelten Code, der sich darauf stützt

  • NTLM-Authentifizierung (einschließlich erweiterter Szenarien rund um Token und SPNs)
  • System.Drawing wie oben (interessante Falte hier: wir brauchen alte Bildformate wie TIFF, die neue OSS-Bibliotheken nicht unterstützen)
  • Verbindung zu WCF/SOAP-APIs - immer noch tonnenweise davon da draußen
  • Windows-Krypto-APIs (einschließlich RSACng, ECDSA und CSP für PKI-Token)
  • WPF-Guis – unsere Kunden wechseln in absehbarer Zeit nicht zu Windows 10, und selbst wenn sie dies tun, möchten sie keine Store-Apps
  • Microsoft Office Interop (insbesondere Access und Excel) für Datenimport und -export
  • Visual Studio-Erweiterbarkeit
  • Plugins von Drittanbietern wie der Oracle ADO.NET-Anbieter

Einige dieser Technologien werden niemals von Core CLR unterstützt. Aber es sind echte Technologien, die die Grundlage für die Entwicklung neuer Apps bilden – wir brauchen eine Version von .NET, die Zugriff auf dieses Zeug hat. Im Moment ist unsere Position überschaubar: Wir isolieren "alte" (eigentlich: plattformspezifische) Abhängigkeiten in ihre eigenen Komponenten, die net461-spezifisch sind. Bestimmte Business-Apps nehmen dann eine Abhängigkeit von netfx an, wenn sie diese Funktionen benötigen, und nicht anders. Ich stelle mir eine Zukunft vor, in der dies für neue Apps selten ist, aber es ist schwer vorstellbar, dass es jemals 0 % sein wird.

Sie haben all diese Arbeit an csproj und dem SDK geleistet, weil Interop wichtig ist. ASP.NET Core ist das Zuckerbrot, der Grund für Interop. Wegnehmen halte ich nicht für sinnvoll. Und nein, "Sie können Ihre Referenzen in eine Richtung laden, aber sie werden wahrscheinlich zur Laufzeit fehlschlagen" ist keine Interoperabilität.

@gulbanana Können Sie die Teile des Systems beschreiben, die ASP.NET Core verwenden, warum sie sich im selben Prozess wie .NET Framework befinden müssen. Ich schätze die Liste (Visual Studio-Plug-ins, Office-Interop usw.), aber ist ASP.NET Core heute an all diesen Stellen eingebettet (ich habe kein gutes Bild aus der obigen Beschreibung)?

Was haben Sie auch verwendet, bevor ASP.NET Core existierte? Oder ist dies nur ein neues Unterfangen, das ASP.NET nie verwendet hat, aber eine 5-10-jährige Wette darauf eingegangen ist, dass ASP.NET Core auf .NET Framework eine Sache ist? Hast du dir Katana angeschaut?

OK, hier sind einige konkrete Fallstudien. Ich sage gleich vorweg, dass ich sicher bin, dass viele davon durch Ausführen der Desktop-spezifischen Arbeit in einem separaten Prozess gehandhabt werden könnten , obwohl es wie ein großer Aufwand erscheint, eine Reihe von Schnittstellenimplementierungen im Grunde in RPC umzuwandeln. Es ist auch nicht so, dass wir einfach Remoting oder binäre Serialisierung zwischen Kern- und Desktop-CLRs verwenden können.

NTLM/AD

Für Single-Sign-On-Zwecke haben wir Apps, die darauf angewiesen sind, dass der Browser Windows-Anmeldedaten an IIS weiterleitet, der sie an eine ASP.NET Core-Website weiterleitet. Ein Teil des Authentifizierungsprozesses besteht dann darin, nach Informationen zu suchen, z. B. ob der Benutzer einer bestimmten AD-Gruppe angehört. Ich würde wirklich gerne mehr über das "Windows Support Pack" erfahren und ob es solche Dinge abdecken soll.

System.Zeichnung

Dies wird in einer Webanwendung verwendet, die Miniaturansichten und grundlegende Bildbearbeitungen (Rotation, Wasserzeichenüberlagerung) erstellt. Viele der verwendeten Bilder stammen aus der Zeit der Dinosaurier, also gibt es Dinge wie TIFF darin. Es handelt sich um Daten, die von einer Regierungsbehörde verwaltet werden und sich auf bestimmte Immobilienangebote und Landmanagement beziehen. In diesem Fall war die Anwendung ursprünglich ASP.NET MVC und wurde durch MVC 2, 4, 5 und jetzt Core aktualisiert/umgeschrieben.

VSIX

Dies ist ein Fall der Einbettung von AN-C in netfx und nicht umgekehrt. Wir haben Visual Studio-Erweiterungen für die Codegenerierung, die „Vorlagen“ für verschiedene RAD-Szenarien ausführen. Einige dieser Vorlagen wurden für die Webentwicklung erstellt und beziehen sich zur Entwurfszeit auf AN-C-Typen (sie werden mit Präprozessor/Laufzeit T4 erstellt).

Krypto

Dieser muss meiner Meinung nach wirklich in-proc sein - wir haben Lizenzierungsszenarien, in denen der Code sehr sicherheitsrelevant ist. Im Großen und Ganzen entschlüsselt und verifiziert es Lizenzdateien in Bezug auf die Umgebung, in der der Code ausgeführt wird – dies ist eine gängige Bibliothek, die im Backend von Webapps sowie Desktop-Apps verwendet wird. Irgendwann scheint .NET Core wahrscheinlich genug Krypto-Unterstützung zu bekommen, dass dieser portiert werden kann, aber das ist heute nicht der Fall. Eine Option, die wir heute zum Beispiel haben, ist Fortinet/ePass2003 PKI-Token-Unterstützung, wo ihre Middleware Core definitiv nicht unterstützt (und es gibt keinen Zeitrahmen dafür).

Oracle ADO.NET

Die Verwendung von Entity Framework 6 mit einem Oracle-Back-End muss nicht prozessintern sein, aber es wäre sicherlich unpraktisch für unsere Websites, eine zusätzliche Ebene hinzuzufügen, nur um zu einer Datenbank zu gelangen!

WPF-Interop

Heutzutage verwenden wir Microsoft.Extensions.Logging in all unseren Desktop-Anwendungen – die Protokollierungsabstraktionen selbst müssen prozessintern sein, auch wenn Implementierungen dies nicht sind.

Was wir vor ASP.NET Core verwendet haben – ASP.NET MVC! Wir könnten zurückkehren, aber es wäre eine große Schande, auf alle Vorteile zu verzichten.

Als Architekt ist es mein Fehler, nicht untersucht zu haben, ob „ASP.NET Core wird auf dem vollständigen Framework ausgeführt“ über die erste Version hinaus bestehen bleiben würde. Es ist mir ehrlich gesagt nie in den Sinn gekommen, dass dies nicht der Fall wäre. Ich hätte einfach nicht gedacht, dass es schon 2018 zB keine unterstützte Version geben könnte, die Office-Dokumente laden könnte ...

Eine Sache, die mir nicht klar ist, ist, wo ASP.NET Core in jedem der von Ihnen erwähnten Szenarien verwendet wird.

NTLM/AD

Dieser macht Sinn und ich würde gerne verstehen, auf welche APIs das am Ende abgebildet wird. Ist das nur System.DirectoryServices? Daran wird aktiv gearbeitet (Sie können es in Corefx sehen).

System.Zeichnung

Dies ist eine bekannte Lücke, die wir angehen wollen. Ich habe hier noch keine Antworten und werde kein Umschreiben mit ImageSharp vorschlagen (obwohl dies eine Option ist). Dies muss angegangen werden.

VSIX

Wo ist hier der ASP.NET Core? Läuft es innerhalb einer Visual Studio-Erweiterung?

Krypto

Gibt es ein Corefx-Problem für diesen? Warum wird es nicht einfach portiert? Im Gegensatz zu .NET Framework sind .NET Core-Releases vom Betriebssystem entkoppelt, sodass dies eher früher als später passieren könnte, wenn es als wichtig erachtet wird. (Haftungsausschluss: Ich weiß nicht genug über Krypto, um die Auswirkungen dieser plattformübergreifenden Ausführung zu verstehen).

Oracle ADO.NET

Wo kommt hier ASP.NET Core ins Spiel? Wollen Sie damit nur sagen, dass der Oracle-Anbieter noch nicht auf .NET Core portiert wurde?

Heutzutage verwenden wir Microsoft.Extensions.Logging in all unseren Desktop-Anwendungen – die Protokollierungsabstraktionen selbst müssen prozessintern sein, auch wenn Implementierungen dies nicht sind.

Microsoft.Extensions.* bleibt netstandard, sodass Sie dort abgedeckt sind.

Warum keine Ankündigung/Diskussion?
Ich liebe, was das Kernteam von aspnet/.net tut, aber ich habe die gleichen Befürchtungen wie @jhurdlow.

Freut mich, von MEL zu hören. Zu den anderen Punkten -

NTLM

Hier ist eine Klasse, die in den meisten unserer Anwendungen verwendet wird. Es nutzt die API ziemlich trivial, Dinge, die hoffentlich theoretisch portiert werden könnten (aber nicht).
https://gist.github.com/gulbanana/70fe791735ee884169e2eee354a32ad2

VSIX

Die für den asp.net-Kern spezifischen Codegen-Vorlagen verwenden das Aktions-/Routingsystem (IFileProvider usw.), um Controller und Ansichten usw. zu erkennen und unser Gerüst auszufüllen. Wir hosten keinen ASP.NET-Webhost innerhalb von Visual Studio, sondern prüfen nur ASP.NET-Anwendungen.

Krypto

Ich vermute, dass die von uns verwendeten Algorithmen portiert werden , aber das ist noch nicht geschehen. Dies würde alles ganz anders aussehen, wenn die Prämisse eine Ankündigung eines langfristigen Plans wäre, die Unterstützung für asp.net-core-on-netfx einzustellen, und eine Diskussion darüber, wann dies möglich sein könnte!

Orakel

Ja, dies würde behoben werden, wenn ein Oracle-Port passiert (vorausgesetzt, er ist voll funktionsfähig und so weiter).

Noch ein Anwendungsfall:
Eine unserer Anwendungen importiert Altdaten aus einer Access-Anwendung. Im Moment läuft dieser Importprozess auf einem Server in einer asp.net-Core-Website. Es verwendet COM-Interop, um acedao.dll aus der weiterverteilbaren accdb/jet-Engine zu laden, liest Tabellen in unsere Entity-Abstraktionen und speichert sie dann in einer moderneren SQL-Datenbank.

Dies ist ein weiterer Fall von 'könnte außerhalb des Prozesses sein, aber warum sollte es sein'. Wir würden AN-C im Wesentlichen als Frontend für eine WebAPI 2-Website oder so etwas verwenden, in diesem Fall sind wir zu dieser Abhängigkeit von der Vergangenheit zurückgekehrt :(

Insgesamt ist es unser Ziel, den Großteil unserer Arbeit auf .NET Core zu verlagern. Wir möchten so viel Interop wie möglich und so lange wie möglich, während wir die Dinge verschieben ...

WTF!!! 😨
Wollen Sie damit sagen, dass ASP.NET Core 2 nicht mehr auf Full .NET Framework 4.x abzielt !!!
Wir haben gerade vor einem Monat ein Projekt mit ASP.NET Core 1.1 gestartet und uns auf .NET 4.6 konzentriert, weil wir auf einige vollständige .NET-Bibliotheken verweisen. Und wir wollten auf ASP.NET Core 2 upgraden. Aber was ich aus diesem Beitrag höre ... 😞
Sehen Sie, wir haben ASP.NET Core aufgrund seiner Vorteile ausgewählt (DI, zusammengeführte API und MVC, ... leistungsstark), also geben Sie bitte als Wechselmann an.

Wir haben gerade vor einem Monat ein Projekt mit ASP.NET Core 1.1 gestartet und uns auf .NET 4.6 konzentriert, weil wir auf einige vollständige .NET-Bibliotheken verweisen

Was machen diese Bibliotheken? Haben Sie die erste Antwort von @shanselman https://github.com/aspnet/Home/issues/2022#issuecomment -299536123 gelesen? Es ist möglich, auf einige .NET Framework-Bibliotheken in .NET Core 2.0 zu verweisen (vorausgesetzt, sie bleiben innerhalb der Teilmenge von APIs).

Was machen diese Bibliotheken? Haben Sie die erste Antwort von @shanselman #2022 (Kommentar) gelesen? Es ist möglich, auf einige .NET Framework-Bibliotheken in .NET Core 2.0 zu verweisen (vorausgesetzt, sie bleiben innerhalb der Teilmenge von APIs).

@davidfowl Ja, ich habe den Kommentar von @shanselman gelesen, wir verwenden einige Libs der Firma, einige dieser Libs verwenden WCF, alle diese Libs sind stabil, sie zielen auf .NET 3.5 ab, und wir können sie nicht anfassen.

Dies wird eine sehr häufige Situation sein. Ich würde gerne wissen, ob Informationen (Telemetrie?) darüber gesammelt wurden, wie viele Benutzer von ASP.NET Core bisher .NET Core im Vergleich zu .NET Framework verwenden.

Ich persönlich bin darüber nicht emotional, aber einige Beobachtungen:

  • Die meisten Kunden, die ich heute habe, verwenden die Kombination asp.net core 1.x/full framework, weil sie Angst davor haben, all-in auf die neuen Sachen zu gehen
  • Wie aus den Download-Zahlen des Nuget-Pakets hervorgeht, ist die Akzeptanz des asp.net-Kerns nicht großartig. Mit diesem Schritt wird es noch ein bisschen schwieriger, etwas zu verkaufen, das sich derzeit nicht gut verkauft.
  • Es ist großartig, dass Sie das LDAP-Zeug als Lücke identifiziert haben (ich glaube, ich habe in den letzten 10 Jahren nie jemanden gesehen, der diese Bibliotheken verwendet, aber vielleicht bin ich das nur). Das größere Problem werden Bibliotheken von Drittanbietern sein. Dies werden die wahren Gründe sein, warum die Leute nicht zu .net Core wechseln werden

Diese ganze Situation ist wieder ein weiteres gutes Beispiel dafür, dass MS einfach eine Entscheidung ohne Vorankündigung trifft. Nur weil einige Leute den Check-Ins folgen, existiert dieser Thread hier.

Ich könnte mich irren, aber ich dachte, .NET Core steht jetzt unter der Verwaltung des DNF - diese Entscheidungen sind also nicht mehr rein MS-intern.

Das LDAP/AD-Zeug ist definitiv ein Grund, warum ich gerade jetzt bei net462 auf dem Laufenden bleiben muss. Ich würde gerne komplett gehen, BAM -> NetCore komplett, aber das ist ein Manko.

Ich verwende auch XML-RPC.net in einem meiner Projekte. Es verwendet ernsthaftes Reflection.Emit darin, und ich bin mir nicht sicher, ob NetCore 2 es vollständig unterstützen wird. Ich muss den Portability Analyzer ausprobieren, um es sicher zu sehen.

Ich finde diese ganze Situation ein bisschen entmutigend, wie schnell und einfach eine wichtige Entscheidung wie diese, die die Zukunft von .NET betrifft, ohne jegliche Transparenz in letzter Minute und wieder einmal getroffen werden kann. Es wurde viel Energie investiert, um das bestehende .NET-Ökosystem bei der Migration zu ASP.NET Core zu verkaufen, wobei (meines Wissens nach) die Botschaft lautet, dass .NET Standard 2.0 sich auf Kompatibilität konzentrieren und die Version sein wird, die die Lücke zu .NET schließt v4.x, um endlich eine solide, stabile .NET-Plattform zu produzieren, auf die sich das Ökosystem endlich verlassen kann. Ich persönlich glaube nicht, dass .NET Core wirklich durchstarten wird, bis .NET Standard 2.0 veröffentlicht wird, da ich davon ausgegangen bin, dass es das „versprochene stabile Land“ sein wird, auf das wir alle warten – jetzt habe ich keine Ahnung, was „.NET Standard 2.0" bedeutet, was genau es abdecken wird und welche Bibliotheken nur für .NET Core geplant sind.

Da es keine vorherige offizielle Ankündigung, Bitte um Feedback, Umfrage oder Begründung gegeben hat, „scheint“ diese Entscheidung ohne Beteiligung der Community oder Auswirkungsanalyse auf das bestehende .NET-Ökosystem getroffen worden zu sein und wird wahrscheinlich das gesamte Ökosystem für viele fragmentieren Jahre kommen. Durch das Entfernen der .NET v4.x-Unterstützung entfällt für viele Unternehmen ein reibungsloser Migrationspfad, um ihre vorhandenen Codebasen auf das neue Entwicklungsmodell von ASP.NET zu migrieren. Dies wird sie nicht ermutigen, schneller zu .NET Core zu springen, es hindert sie effektiv daran, dies auch nur zu versuchen, was zu einer massiven Fragmentierung führt, die das .NET-Ökosystem in zwei Teile zerbrechen wird. Ich sehe nicht, wie dies am Ende anders sein wird als Python 2/3, das durch die Fragmentierung irreparabel geschädigt wurde, von der es sich seit fast einem Jahrzehnt immer noch nicht erholen konnte.

Die meisten vorhandenen .NET-Codebasen sind Industriebrachen, die hinter den Kulissen von „dunklen Materie“-.NET-Entwicklern entwickelt werden, von denen die meisten keine Ahnung haben werden, dass diese Entscheidung getroffen wurde, da .NET Core 1.1 .NET v4.x unterstützt und das Messaging für .NET Standard 2.0 war das Versprechen einer verbesserten Kompatibilität. Ich erwarte eine massive Gegenreaktion, sobald die Nachricht und die Auswirkungen dieser Entscheidung endlich zu Hause eintreffen. Viele Entwickler, die die Einführung von .NET Core intern innerhalb ihrer Organisation verkauft haben, werden sich betrogen fühlen, da sie effektiv auf eine Sackgassenplattform migriert haben (wenn sie aus irgendeinem Grund nicht vollständig zu .NET Core migrieren können). ) eine harte Realität, der sie sich stellen müssen, nachdem sie die monumentale Entscheidung getroffen haben, Stakeholder in ihrer Organisation davon zu überzeugen, die für ihre aktuelle Migration erforderlichen Ressourcen zu genehmigen.

Die meisten Unternehmen müssen ihre vorhandenen Codebasen „in-flight“ migrieren, wo sie ihre vorhandenen Systeme kontinuierlich bereitstellen müssen, während sie ihre Codebasis „parallel“ migrieren, die dann zuerst auf .NET v4.x bereitgestellt werden soll Nachdem sich alles stabilisiert und alle Probleme behoben wurden, können sie von dort aus eine vollständige Migration zu .NET Core planen.

Diese Entscheidung wird auch im Zusammenhang mit jahrelangen bahnbrechenden Änderungen an ASP.NET getroffen, die meiner Meinung nach das Vertrauen erodiert haben, dass .NET eine stabile Plattform ist, auf die sich Unternehmen verlassen können. Ich liebe das neue Entwicklungsmodell von .NET Core, aber was wir unserer Meinung nach am meisten brauchen, ist eine stabile Plattform, auf die wir uns verlassen können und auf die der Rest des Ökosystems aufholen kann. .NET Core befindet sich immer noch im unheimlichen Tal, mit unausgereiften Tools, inkompatiblen Abhängigkeiten, Laufzeitproblemen, veralteter Dokumentation usw. - Ich habe .NET seit den frühen Tagen, als es zum ersten Mal veröffentlicht wurde, nicht mehr so ​​instabil gesehen.

Warum nicht eine Umfrage darüber durchführen, was .NET-Entwickler mehr wollen? dh eine solide, stabile und polierte Plattform oder eine „schnelllebige“ Plattform, die neue Funktionen schneller bereitstellt? Ich verstehe, dass es viel weniger Aufwand erfordern würde, sich keine Gedanken über die Rückportierung von Funktionen nach .NET v4.x machen zu müssen, aber es wäre von unschätzbarem Wert, eine Version von ASP.NET Core zu haben, die sich hauptsächlich auf die Bereitstellung einer stabilen, kompatiblen Plattform mit langer Lebensdauer konzentriert Laufzeitunterstützung, die entweder auf .NET v4.x oder .NET Core ausgeführt werden kann.

Ist dieses Schiff gesegelt oder gibt es eine Option, ASP.NET Core 2.0 so zu lassen, wie es ist? dh mit den meisten Bibliotheken und Abstraktionen, die von .NET Standard 2.0 abgedeckt werden, und dann in der nächsten Version von ASP.NET Core 3.0 ankündigen, dass die nächste Plattform nur .NET Core sein wird? Dies wird es Organisationen ermöglichen, weiter voranzukommen und ASP.NET Core 2.0 einzuführen und es dem Rest des Ökosystems zu ermöglichen, mit stabilen und gut unterstützten Tools und Bibliotheken aufzuholen, während eine saubere Trennung von der reinen .NET Core-Plattform/ Funktionen beginnen.

Es ist möglich, auf einige .NET Framework-Bibliotheken in .NET Core 2.0 zu verweisen (vorausgesetzt, sie bleiben innerhalb der Teilmenge von APIs).

Dies atmet Unsicherheit, nur sehr wenige Menschen werden ihren Ruf und die Gesundheit und Stabilität ihrer Systeme riskieren und eine vollständige Migration zu .NET Core versuchen, wenn Unsicherheit darüber besteht, welche ihrer Abhängigkeiten ausgeführt werden können und welche nicht .NET Core, was bedeutet, dass mehr Menschen auf absehbare Zeit bei .NET v4.x bleiben werden.

Ich weiß nicht wirklich, wie sich das letztendlich auswirken wird und welche wahren Auswirkungen diese Entscheidung auf das gesamte .NET-Ökosystem haben wird, aber die Tatsache, dass wichtige Entscheidungen wie diese mit weitreichender Wirkung ohne Beteiligung der externen Community getroffen werden können, ist besorgniserregend.

Ich wünschte, Sie wären etwas weniger versessen darauf, Ihre Benutzerbasis zu teilen.

Mein Standpunkt beim Erstellen einer Bibliothek ist es, sie so einfach wie möglich für so viele Menschen wie möglich an so vielen Orten wie möglich zu verwenden. Es ist ein Schmerz im Nacken (suchen Sie nach #if Compiler-Direktiven in Newtonsoft.Json und Sie erhalten mehr als 1300 Ergebnisse), aber "Es funktioniert einfach" ist ein starkes Verkaufsargument.

Warum nicht eine Umfrage darüber durchführen, was .NET-Entwickler mehr wollen? dh eine solide, stabile und polierte Plattform oder eine „schnelllebige“ Plattform, die neue Funktionen schneller bereitstellt? Ich verstehe, dass es viel weniger Aufwand erfordern würde, sich keine Gedanken über die Rückportierung von Funktionen nach .NET v4.x machen zu müssen, aber es wäre von unschätzbarem Wert, eine Version von ASP.NET Core zu haben, die sich hauptsächlich auf die Bereitstellung einer stabilen, kompatiblen Plattform mit langer Lebensdauer konzentriert Laufzeitunterstützung, die entweder auf .NET v4.x oder .NET Core ausgeführt werden kann.

Echte Frage, ASP.NET Core 1.x unterstützt derzeit .NET Framework und .NET Core. Nehmen wir an, es war die stabile Plattform, die Sie oben erwähnt haben, die wir auf beiden Laufzeiten behoben und unterstützt haben, aber keine weiteren Funktionen erhalten haben. Würde das reichen?

ASP.NET Core und .NET Core sind derzeit die sich schnell entwickelnden, funktionsreichen Plattformen für .NET. Es ist eine Version von .NET, die an kein Betriebssystem gebunden ist und uns die Agilität verleiht, die wir für schnelle Innovationen und schnellere Veröffentlichungen benötigen.

Ist dieses Schiff gesegelt oder gibt es eine Option, ASP.NET Core 2.0 so zu lassen, wie es ist? dh mit den meisten Bibliotheken und Abstraktionen, die von .NET Standard 2.0 abgedeckt werden, und dann in der nächsten Version von ASP.NET Core 3.0 ankündigen, dass die nächste Plattform nur .NET Core sein wird? Dies wird es Organisationen ermöglichen, weiter voranzukommen und ASP.NET Core 2.0 einzuführen und es dem Rest des Ökosystems zu ermöglichen, mit stabilen und gut unterstützten Tools und Bibliotheken aufzuholen, während eine saubere Trennung von der reinen .NET Core-Plattform/ Funktionen beginnen.

Wir sind immer offen für Feedback und ASP.NET Core 2.0 wurde noch nicht ausgeliefert. Wenn ASP.NET Core 3.0 die Version war, die .NET Framework fallen ließ, würde das die Dinge besser machen? Wenn Sie sich einige der Rückmeldungen von @gulbanana und @ikourfaln ansehen , gibt es Technologien, die wahrscheinlich nie portiert werden und daher niemals auf .NET Core funktionieren werden. Bedeutet das nicht, dass .NET Framework so ziemlich für immer unterstützt wird? Würden wir nicht genau diese Diskussion in einem Jahr führen? Vielleicht sind bis dahin das Ökosystem oder die Bibliotheken, die .NET Core unterstützen, größer, sodass es weniger Auswirkungen hat? Was ist mit den Unternehmensbibliotheken, die niemals aktualisiert werden (oder deren Quellcode verloren gegangen ist)? Werden sich die in einem Jahr ändern?

Mein Standpunkt beim Erstellen einer Bibliothek ist es, sie so einfach wie möglich für so viele Menschen wie möglich an so vielen Orten wie möglich zu verwenden. Es ist nervig (suchen Sie nach #if-Compiler-Direktiven in Newtonsoft.Json und Sie erhalten mehr als 1300 Ergebnisse), aber „es funktioniert einfach“ ist ein starkes Verkaufsargument.

Nichts für ungut @JamesNK , aber JSON.NET ist ein JSON-Parser und größtenteils ein einzelnes Paket (ich weiß, dass es noch ein paar mehr gibt). ASP.NET Core hat > ​​200 Pakete.

Nichts für ungut, aber ich bin ein Typ, der Teilzeit arbeitet. Ihr Problem ist schwieriger, aber Sie haben exponentiell mehr Ressourcen.

Nachdem ich dies gelesen und die Abhängigkeiten durchgesehen habe, bin ich weit weniger davon überzeugt, dass dies eine gute Idee ist.

Nach derzeitigem Stand können wir keine unserer Apps auf netstandard / netcoreapp portieren, bis System.DirectoryServices verfügbar ist ( CoreFX-Ausgabe Nr. 2089 hier ). Wir können also zwar auf ASP.NET Core 1.x portieren, aber nicht auf 2.0. Schauen wir uns die Anwendungen hier an: Opserver, Stack Overflow selbst, unsere internen Apps ... nichts wäre fertig, da 2.0 zu diesem Zeitpunkt geplant ist. Laut dem Standup dieser Woche würden kritische Dinge wie DirectoryServices noch in einer späteren Version von 2.x folgen.

Also zwischen 1.0 und 2.0 hat es sich von etwas geändert, zu dem ich mich bereit gemacht habe, zu etwas, zu dem ich nicht gehen kann. Also ja, ich würde sagen, es ist noch nicht fertig. ASP.NET ist eine Möglichkeit, die Bits, die ich benötige, über HTTP verfügbar zu machen. ASP.NET ist nicht das, was ich an sich brauche. Ich verwende .NET nicht nur für die Web-Bits, ich verwende es für die Plattform ... wie viele andere auch. Die Plattform ist nicht bereit für die Vielzahl von Anwendungsfällen, die Benutzer verlangen, daher verursacht das Zwingen von Benutzern auf diese Plattform Schmerzen und Blockaden.

Das Fazit ist, dass wir, wenn wir AD-Authentifizierung (ein großer Teil der Plattform) benötigen, gerade auf der 1.x-Linie aufgegeben wurden. Da wollte ich mit unseren Apps hin ... aber wenn das die Richtung ist, dann macht es keinen Sinn, sich hier anzustrengen, bis die Bits, die ich brauche, am Zielort verfügbar sind.

Wenn wir sagen können, dass diese kritischen Dinge wie System.DirectoryServices , System.Drawing und die anderen Top-Elemente, die die Leute brauchen, mit ASP.NET Core 2.0 bereit sein werden, ändert sich meine Meinung sehr. Wenn sie ein nachträglicher Einfall sind (wie die aktuellen Zeitpläne zeigen), unterstützen Sie das .NET Framework bitte weiter, bis sie es sind.

Sich schnell zu bewegen ist großartig. Ich liebe es. Ich führe gerade Alphas in der Produktion aus. Aber all das spielt keine Rolle, wenn es für Ihren Anwendungsfall überhaupt nicht funktioniert.

Eine Sache, mit der ich persönlich zu kämpfen habe, ist die Frage „stabile Plattform“ vs. „neue Funktionen“. Einerseits wollen wir, dass die Plattform stabil, zuverlässig und kompatibel ist, andererseits will niemand auf 1.x bleiben, weil es keine 2.x-Features hat. Gibt es in ASP.NET Core 2.x wirklich überzeugende Features, die die Leute in diese Richtung ziehen, oder liegt es einfach daran, dass wir mehr Features haben als in 1.x (weil es neu und glänzend ist)?

Wenn es letzteres ist, kümmern sich diese Leute dann um Stabilität? Wenn die Antwort ja lautet, warum ist dann ASP.NET Core 1.x nicht ausreichend?

Ich verwende .NET nicht nur für die Web-Bits, ich verwende es für die Plattform ... wie viele andere auch. Die Plattform ist nicht bereit für die Vielzahl von Anwendungsfällen, die Benutzer verlangen, daher verursacht das Zwingen von Benutzern auf diese Plattform Schmerzen und Blockaden.

Einverstanden, aber wie hängt das Ihrer Meinung nach damit zusammen, dass ASP.NET Core 2.x die .NET Framework-Unterstützung einstellt? Wenn mehr Abhängigkeiten online kommen, werden sie in gewisser Weise überall funktionieren, da die Plattform sich weiterentwickelt, die breite Palette von Laufzeiten wird davon profitieren. Alle Versionen von ASP.NET Core-Anwendungen könnten plötzlich diese Features nutzen.

Wenn es letzteres ist, kümmern sich diese Leute dann um Stabilität? Wenn die Antwort ja lautet, warum ist dann ASP.NET Core 1.x nicht ausreichend?

Jeder möchte immer neue Funktionen, die Möglichkeit neuer Funktionen oder zumindest wissen, dass er irgendwann später die Möglichkeit hat, weitere Goodies zu bekommen. Wenn Sie eine Plattform schließen und in den „stabilen“/„Wartungsmodus“ versetzen, sehen die Leute das als nicht mehr beachtet an.

Gibt es in ASP.NET Core 2.x wirklich überzeugende Features, die die Leute in diese Richtung ziehen, oder liegt es einfach daran, dass wir mehr Features haben als in 1.x (weil es neu und glänzend ist)?

Support – dafür bezahlen wir.

Wenn die Antwort ja lautet, warum ist dann ASP.NET Core 1.x nicht ausreichend?

Denn der Support endet knapp ein Jahr nach Release (laut Scott oben). Und bis dahin bin ich vielleicht kaum mit der Portierung von Stack Overflow fertig.

Wie hängt das damit zusammen, dass ASP.NET Core 2.x die .NET Framework-Unterstützung einstellt?

Weil Bibliotheken, die ich haben muss, nicht da sind. Und ich weiß nicht, wann sie sein werden. Ich würde also auf 1.x stecken bleiben und habe eine Zeitbombe, bis der Support endet. Habe ich genug Zeit, um von 1.0 auf 2.x (oder 3.x) zu portieren, bevor der Support endet? Wahrscheinlich nicht.

Große Codebasen können nicht einfach anhalten und portieren, sie brauchen Zeit, es muss in Etappen geschehen. Als Zwischenschritt war eine .NET 4.6.x-Portierung auf ASP.NET Core machbar. Sofort zum Kern zu gehen ist viel schwieriger, dauert viel länger und erfordert langlebigere Äste und mehr Schmerzen. Wenn wir dies nicht schrittweise tun können, kann ich mir ehrlich gesagt einfach nicht vorstellen, dass wir jemals den Schritt von der jetzt aufgegebenen ASP.NET 5-Linie machen werden. Ich kann den Zeitaufwand, die Kosten und die Auswirkungen auf die Entwicklung auf keinen Fall rechtfertigen.

Ich denke, viele OSS-Autoren sind wie ich – es ist eine Verlängerung unserer täglichen Arbeit. Wenn wir die Plattform nicht nutzen oder dogfooden, sind die Bibliotheken viel schlechter dran oder werden nicht erstellt. Und wir können die Zeit, um sie zu warten, nicht mit Firmenstunden rechtfertigen, die wir heute aufwenden. Und jede Bibliothek, die wir erstellen, stammt aus einem Bedarf, den wir in der Produktion erfüllen. Die Anwendungsfälle, die das Ökosystem fallen lassen, haben viele nachgelagerte Auswirkungen, die nicht plötzlich sind, sich aber dennoch summieren.

Derzeit ist meine Ansicht die folgende: Es gibt eine neue Plattform, die bis etwa Juli 2018 funktioniert. Danach: Ich weiß nichts, ich hoffe nur, dass das, was ich brauche, bis dahin auf netstandard / netcoreapp verfügbar ist. Und ich hoffe, ich habe genug Zeit zum Portieren, bevor der Support endet. Ich werde jedoch nicht dafür bezahlt, zu hoffen, ich werde dafür bezahlt, Plattformentscheidungen für unser Unternehmen zu treffen, und ASP.NET Core ist mit dieser Änderung und ohne Datum für eine funktionierende Version eine schlechte Wette (für uns).

Lassen Sie mich eine einzeilige Zusammenfassung anbieten: Ohne .NET Full Framework-Unterstützung bietet ASP.NET Core in den nächsten 2 Jahren keine unterstützte Plattform für unsere Anwendungsfälle.

Als Kurzversion ist es das:

Priorität 1: Dies muss auf net461 funktionieren, egal welche ifdefs, perf es gibt.
Priorität 2. Wenn Sie es mit .NET Core 2.0 10x schneller machen können, dann ist das großartig. Es ist ein guter Grund für Leute, sich für die Plattform zu entscheiden und/oder zu migrieren, wenn sie können.

Das Wichtigste hier ist, dass es für eine langfristige Unterstützung immer noch auf dem gesamten Framework funktionieren muss, auch wenn es dort langsamer ist.

Priorität 1: Dies muss auf net461 funktionieren

Und wenn .NET Core vollständig mit net461 kompatibel wäre (im Rahmen des Zumutbaren); also funktionierte alles, was für net461 geschrieben wurde, auf Core; wäre das dann ok?

Grundsätzlich haben Sie an diesem Punkt eine stabilere Plattform als net4x, da Sie nebeneinander und eigenständig arbeiten können (auch ein Hauch von X-Plat). Während net461 ganze Maschinenänderungen auf 4.6.1, 4.6.2, 4.7 usw. hat

Offensichtlich wird etwas nie funktionieren; wie partielles Vertrauen - aber das hat sowieso nie funktioniert.

Echte Frage, ASP.NET Core 1.x unterstützt derzeit .NET Framework und .NET Core. Nehmen wir an, es war die stabile Plattform, die Sie oben erwähnt haben, die wir auf beiden Laufzeiten behoben und unterstützt haben, aber keine weiteren Funktionen erhalten haben. Würde das reichen?

Ich würde gerne eine LTS-Version von ASP.NET Core 2.0 sehen, wie Ubuntu / Redhat es mit ihren LTS-Versionen tut, die sie seit mehr als 5 Jahren unterstützen. Es würde ein solides kompatibles Ziel bieten, zu dessen Annahme sich der Rest des Ökosystems vertrauensvoll verpflichten kann.

Ich persönlich interessiere mich mehr für einen stabilen .NET Standard 2.0 als für zukünftige reine .NET Core-Funktionen, da ich gerne zur .NET-Entwicklung zurückkehren würde, wo alles einfach wieder funktioniert, die Tools nicht kaputt sind, die beliebte . NET-Pakete bieten alle Unterstützung, die umgebenden Bereitstellungs- und Hostinglösungen sind ausgefeilt und es gibt zahlreiche Dokumente, Posts, Videos und Wissensdatenbanken für einen stabilen ASP.NET Core, auf dem wir mit der Entwicklung von Lösungen beginnen können.

Würden wir nicht genau diese Diskussion in einem Jahr führen? Vielleicht sind bis dahin das Ökosystem oder die Bibliotheken, die .NET Core unterstützen, größer, sodass es weniger Auswirkungen hat? Was ist mit den Unternehmensbibliotheken, die niemals aktualisiert werden (oder deren Quellcode verloren gegangen ist)? Werden sich die in einem Jahr ändern?

In einer idealen Welt würden sowohl .NET v4.x als auch .NET Core in absehbarer Zeit ASP.NET Core unterstützen, und es sind nur neue .NET Core-only-Features, die nur in .NET Core-only-Paketen verfügbar sein werden. Aber wenn MS dazu bestimmt ist, .NET 4.x hinter sich zu lassen, dann wäre eine ASP.NET 2.0 LTS-Version, bevor Sie sich offiziell trennen, das Nächstbeste. Per Definition ist niemand auf neue Funktionen angewiesen, die es noch nicht gibt, sodass niemand gezwungen sein wird, auf eine reine .NET Core v3.0 zu aktualisieren.

Mit der Freiheit, nur eine Plattform unterstützen zu müssen, könnten Sie möglicherweise neue Funktionen bereitstellen, die Entwickler dazu verleiten würden, die nächstneueste und beste Version mit ständig neuen Funktionen zu übernehmen. Ich persönlich bin mit der Funktionalität von ASP.NET jetzt und so zufrieden Ich bin mehr an einer stabilen Version interessiert, in der alles aufpoliert ist, damit ich wieder produktiv sein und mich darauf konzentrieren kann, Lösungen darauf zu entwickeln, anstatt einer sich ständig bewegenden Plattform hinterherzujagen.

Zunächst einmal vielen Dank an @davidfowl , dass Sie in den Thread gesprungen sind und aufgestanden sind/Fragen gestellt haben usw. Wenn es eine hitzige Community gibt, die haufenweise Fragen stellt, ist es einfach, nicht einzugreifen und zu vermeiden, „ein Ziel“ zu sein. Also danke, dass Sie sich konstruktiv einbringen. /me grüßt dich.


Ich sehe zwei Hauptpunkte/Threads, die sich aus diesem Gespräch ergeben:

  1. Anfrage zur Unterstützung von .NET-Desktop in vnext. (das sind 99% der Antworten hier drin)
  2. Fehlende Konsultation der Gemeinschaft über eine so wichtige Entscheidung. (die 2 oder 3 Antworten hier drin).

TL;DR;

  • Können wir bitte offener mit großen wichtigen vnext-Änderungen umgehen?
  • Planen Sie etwas Zeit für RFCs von der Community zu diesen vnext-Änderungen ein.

@mythz hat es schön in seinem Eröffnungssatz zu seinem (zu diesem Zeitpunkt) ~neuesten~ zweitjüngsten Kommentar formuliert:

Ich finde diese ganze Situation ein bisschen entmutigend, wie schnell und einfach eine wichtige Entscheidung wie diese, die die Zukunft von .NET betrifft, ohne jegliche Transparenz in letzter Minute und wieder einmal getroffen werden kann.

Das hat mich persönlich wirklich getroffen, und ich würde mich über einige offizielle Antworten/Kommentare von den zuständigen Leuten bei MS freuen, die diese Anrufe tätigen, bitte. "Wir" sind schon seit verdammt langer Zeit in dieser Community - bekannte Gesichter, bekannte Namen und es ist ziemlich fair zu sagen - alle verfolgen die gleichen positiven Ziele. Ich würde sogar sagen, „wir“ sind eine ziemlich große Großfamilie, Warzen und so.

Ich habe also das Gefühl, dass MS mit der neuen Richtung, die MS eingeschlagen hat (OSS-all-the-things usw.), und mit einigen kürzlich erschienenen Mega-uber-.NET-Threads in den letzten 12/18 Monaten (sprich: Lernen aus diesen Community-Diskussionserfahrungen ) ... dass "wir" alle zusammen darin stecken und dass einige dieser wirklich großen Dinge ™️ weit im Voraus offen diskutiert würden.

Also – können wir bitte einige dieser großen Entscheidungen vorher offen besprechen? Erhalten Sie eine positive Community-Beratung und Diskussion?

Hinweis: Ich akzeptiere, dass dieses Projekt/diese Projekte keine Demokratie sind und dass die _Entscheidungen_ von MS getroffen werden. Kein Problem. Ich kritisiere _das_ nicht. Ich spreche von den Schritten davor. Außerdem verlange ich nicht, dass _alles_ für RFC usw. aufgegeben wird. Nur das eine oder andere wichtige Ticket-Element - wie das, was dieser Thread gestartet hat.

Aber wenn MS dazu bestimmt ist, .NET 4.x hinter sich zu lassen, dann wäre eine ASP.NET 2.0 LTS-Version, bevor Sie sich offiziell trennen, das Nächstbeste. Per Definition ist niemand auf neue Funktionen angewiesen, die es noch nicht gibt, sodass niemand gezwungen sein wird, auf eine reine .NET Core v3.0 zu aktualisieren.

Ich verstehe nicht. Auch ist noch niemand auf Funktionen in ASP.NET 2.0 angewiesen, da sie in einer Version nicht vorhanden sind. Ist ASP.NET Core 1.x also nicht diese Version? Es läuft auf Full Framework, Core 1.0 und Core 2.0 und kann als Sprungbrett für ASP.NET Core 2.x dienen?

@onovotny

Jeder möchte immer neue Funktionen, die Möglichkeit neuer Funktionen oder zumindest wissen, dass er irgendwann später die Möglichkeit hat, weitere Goodies zu bekommen. Wenn Sie eine Plattform schließen und in den „stabilen“/„Wartungsmodus“ versetzen, sehen die Leute das als nicht mehr beachtet an.

Ja, aber es ist wirklich schwierig, das gleiche Qualitätsniveau zu garantieren, wenn .NET Framework die große stabile Unterstützung ist, die an die Betriebssystemkomponente gebunden ist. Wie @terrajobst sagte, einige Dinge werden definitiv irgendwann portiert, andere müssen noch geklärt werden. Tatsache ist, dass ASP.NET Core am besten auf .NET Core läuft, da wir die Möglichkeit haben, den gesamten Stack auf einmal zu überarbeiten. Bisher gibt es große Leistungsunterschiede zwischen den beiden Laufzeiten, und wir müssen aufgrund der .NET Framework-Unterstützung noch Abhängigkeiten von neuen APIs eingehen. Im weiteren Verlauf werden wir neue APIs hinzufügen, die irgendwann in .NET Framework erscheinen können oder auch nicht, und wir wollen nicht im Tempo der stabilsten und langsamsten Laufzeitumgebung (.NET Framework) drehen.

@ Nick Craver

Denn der Support endet knapp ein Jahr nach Release (laut Scott oben). Und bis dahin bin ich vielleicht kaum mit der Portierung von Stack Overflow fertig.

Ich bin mir nicht sicher, ob das ganz richtig ist. Wenn 2.0 verfügbar ist, wird 1.1 weiterhin unterstützt. Also, was ist diese "Unterstützung", von der Sie sprechen? Meinst du bezahlten Support oder meinst du, dass wir Probleme beheben, wenn sie auftreten?

Weil Bibliotheken, die ich haben muss, nicht da sind. Und ich weiß nicht, wann sie sein werden. Ich würde also auf 1.x stecken bleiben und habe eine Zeitbombe, bis der Support endet. Habe ich genug Zeit, um von 1.0 auf 2.x (oder 3.x) zu portieren, bevor der Support endet? Wahrscheinlich nicht.

Wie ich bereits sagte, werden diese Bibliotheken unabhängig von der .NET Core-Version aufleuchten. Ich denke, was Sie sagen, ist, dass Sie die neueste Version von ASP.NET Core (was auch immer das ist) verwenden möchten und dass sie von .NET Framework unterstützt werden soll, bis genügend Bibliotheken auf .NET Core vorhanden sind, sodass der Port ist einfach für Sie spezifisches Szenario.

Große Codebasen können nicht einfach anhalten und portieren, sie brauchen Zeit, es muss in Etappen geschehen. Als Zwischenschritt war eine .NET 4.6.x-Portierung auf ASP.NET Core machbar. Sofort zum Kern zu gehen ist viel schwieriger, dauert viel länger und erfordert langlebigere Äste und mehr Schmerzen. Wenn wir dies nicht schrittweise tun können, kann ich mir ehrlich gesagt einfach nicht vorstellen, dass wir jemals den Schritt von der jetzt aufgegebenen ASP.NET 5-Linie machen werden. Ich kann den Zeitaufwand, die Kosten und die Auswirkungen auf die Entwicklung auf keinen Fall rechtfertigen.

Wie wirkt sich das Revving von ASP.NET Core-Versionen darauf aus? Wenn wir die .NET Framework-Unterstützung in 3.0 einstellen würden (wie sich die Leute in diesem Thread zu entziehen scheinen), würden Sie sich dann nicht trotzdem in derselben Sackgasse befinden? Sie würden Ihre ASP.NET Core 2.0-Anwendung portiert und ein Jahr lang auf Framework ausführen lassen, und wenn 3.0 herauskommt, könnten Sie kein Upgrade durchführen. Sie könnten dies sowieso mit ASP.NET Core 1.1.x tun, das auf .NET Framework ausgeführt wird und auch dann unterstützt wird, wenn ASP.NET Core 2.0 nicht verfügbar ist.

Derzeit ist meine Ansicht: Es gibt eine neue Plattform, die bis etwa Juli 2018 funktioniert. Danach: Ich weiß nichts, ich hoffe nur, dass das, was ich brauche, bis dahin auf netstandard/netcoreapp verfügbar ist. Und ich hoffe, ich habe genug Zeit zum Portieren, bevor der Support endet. Ich werde jedoch nicht dafür bezahlt, zu hoffen, ich werde dafür bezahlt, Plattformentscheidungen für unser Unternehmen zu treffen, und ASP.NET Core ist mit dieser Änderung und ohne Datum für eine funktionierende Version eine schlechte Wette (für uns).

Ein weiteres Jahr ist also genug Zeit für alle? Das ist nicht das Gefühl, das ich aus diesem Thread bekomme.

Priorität 1: Dies muss auf net461 funktionieren, egal welche ifdefs, perf es gibt.
Priorität 2. Wenn Sie es mit .NET Core 2.0 10x schneller machen können, dann ist das großartig. Es ist ein guter Grund für Leute, sich für die Plattform zu entscheiden und/oder zu migrieren, wenn sie können.

Das Wichtigste hier ist, dass es für eine langfristige Unterstützung immer noch auf dem gesamten Framework funktionieren muss, auch wenn es dort langsamer ist.

Der einzige Grund, warum .NET Framework so gut funktioniert wie heute, liegt darin, dass wir es absichtlich unterstützen wollten. Es kam nicht umsonst, es ist nicht "nur schneller im Kern", wir mussten das System absichtlich so entwerfen, dass es möglich war, es auf .NET Framework zum Laufen zu bringen. Auch wenn Sie es noch nicht sehen, wird die Funktionslücke zwischen den beiden größer, sobald wir uns entscheiden (und wir entschieden haben), Abhängigkeiten von APIs zu übernehmen, die noch nicht in .NET Framework vorhanden sind. Wir können tun, was @PinpointTownes sagt, und anfangen, NotSupportedException zu werfen, wenn diese Funktionslücken auftreten, aber meiner Meinung nach ist das eine ziemlich schlechte Erfahrung.

Wir haben ein großes Entwicklungsbudget für die Portierung unserer ASP.net MVC5-App auf das ASP.net Core Full Framework ausgegeben, damit sie gut mit Azure Service Fabric funktioniert. Das gesamte Projekt erstreckte sich über mehrere Monate, in denen mehrere Wochen der Portierung unserer Webanwendung gewidmet waren (und ehrlich gesagt, dem Ringen mit den umständlichen VS2015-Tools).

Der einzige Grund, der funktionierte, war, dass das vollständige Framework unterstützt wurde, da wir derzeit SignalR auf ASP.net Core ausführen (zur Entmutigung von @davidfowl ). Soweit ich das beurteilen kann, wird SignalR von Asp.net Core immer noch nicht unterstützt?

Dann haben wir ungefähr eine Woche damit verbracht, auf die neuen VS2017-Tools zu migrieren. Bußgeld.

_Beachten Sie, dass es bis zu diesem Zeitpunkt überhaupt keine Verbesserungen am Produkt gibt, es handelt sich lediglich um eine Anpassung der Codeform, um sie an die Plattform- und Toolanforderungen von Microsoft anzupassen._

Jetzt sagen Sie mir, dass ich innerhalb von 12 Monaten mehr funktionslose Entwicklungsanstrengungen durchführen muss, ohne Garantie, dass ich es überhaupt schaffen werde, abhängig von einem Haufen Handbewegungen und sollte dazu in der Lage sein? Nein Danke.

Holen Sie sich zunächst alles, was von Microsoft gebrandet ist und das heute im vollständigen ASP.net-Core-Framework verwendet wird, das nur auf ASP.net-Core arbeitet. Zweitens, finden Sie heraus, was (wenn überhaupt) das Ökosystem sonst daran hindern würde, den ASP.net-Kern wie gewünscht zu übernehmen. Dann, und nur dann, stellen Sie die Unterstützung für Netfx ein, wie dies diskutiert wird.

Wir können tun, was @PinpointTownes sagt, und NotSupportedException auslösen, wenn diese Funktionslücken auftreten, aber meiner Meinung nach ist das eine ziemlich schlechte Erfahrung.

Das ist nicht genau das, was ich gesagt habe: Wenn Sie mit Cross-Kompilierung arbeiten, sollte ifdefs definitiv die bevorzugte Option sein, um APIs auszuschließen, die auf einer bestimmten Plattform nicht verfügbar sind, aber wenn Sie aus irgendeinem Grund diese API-Signatur unbedingt öffentlich haben MÜSSEN Vertrag, dann können Sie mit NotSupportedException gehen.

Ich verstehe nicht. Auch ist noch niemand auf Features in ASP.NET 2.0 angewiesen

Ich gehe davon aus, dass die meisten Entwickler auf einen stabilen und hochkompatiblen .NET Standard 2.0 warten, den ihre Abhängigkeiten unterstützen, bevor sie sich zur Migration zu ASP.NET Core verpflichten. Sie werden .NET Core 1.1 jetzt nicht übernehmen wollen, da sie wissen, dass es EOL-ed ist, und MS hat keine gute Geschichte in der Bereitstellung von langfristigem Support für alte DNX/.NET Core-Versionen. Wenn es eine hochkompatible stabile LTS-Version gäbe, die der Rest des Ökosystems sicher übernehmen kann, sollten Unternehmen alles haben, was sie brauchen, um ihre Systeme darauf auszuführen, und sie fühlen sich nicht verpflichtet, auf .NET Core vNext zu aktualisieren, da sie alles haben, was sie haben auf v2.0 benötigen, und wenn die Zeit kommt, wird es viel einfacher sein, ihre Migration von ASP.NET Core 2.0/.NET v4.6 auf eine zukünftige reine .NET Core-Version zu planen.

@Mythos

Ich persönlich interessiere mich mehr für einen stabilen .NET Standard 2.0 als für zukünftige reine .NET Core-Funktionen, da ich gerne zur .NET-Entwicklung zurückkehren würde, wo alles einfach wieder funktioniert, die Tools nicht kaputt sind, die beliebte . NET-Pakete bieten alle Unterstützung, die umgebenden Bereitstellungs- und Hostinglösungen sind ausgefeilt und es gibt zahlreiche Dokumente, Posts, Videos und Wissensdatenbanken für einen stabilen ASP.NET Core, auf dem wir mit der Entwicklung von Lösungen beginnen können.

Ich bin mit allem einverstanden, aber ich sehe nicht, wie sich diese Entscheidung auf das auswirkt, was Sie gesagt haben. Ich will all die gleichen Dinge 👍 .

Mit der Freiheit, nur eine Plattform unterstützen zu müssen, könnten Sie möglicherweise neue Funktionen bereitstellen, die Entwickler dazu verleiten würden, die nächstneueste und beste Version mit ständig neuen Funktionen zu übernehmen. Ich persönlich bin mit der Funktionalität von ASP.NET jetzt und so zufrieden Ich bin mehr an einer stabilen Version interessiert, in der alles aufpoliert ist, damit ich wieder produktiv sein und mich darauf konzentrieren kann, Lösungen darauf zu entwickeln, anstatt einer sich ständig bewegenden Plattform hinterherzujagen.

Richtig, ist das nicht ASP.NET Core 1.x? Wenn die Unterstützung auf 1.x erweitert würde, wäre das nicht genug? Wir könnten einfach sicherstellen, dass ASP.NET Core 1., das Netstandard 1.x ist, auf .NET Core 2.0 ausgeführt wird (was es bereits tut) und dies für ein weiteres Jahr oder so unterstützen.

Das ist nicht genau das, was ich gesagt habe: Wenn Sie mit Cross-Kompilierung arbeiten, sollte ifdefs definitiv die bevorzugte Option sein, um APIs auszuschließen, die auf einer bestimmten Plattform nicht verfügbar sind, aber wenn Sie aus irgendeinem Grund diese API-Signatur im öffentlichen Vertrag haben müssen, dann können Sie das Gehen Sie mit NotSupportedException.

Ich spreche nicht einmal davon, öffentliche APIs offenzulegen. Ich spreche von APIs, die wir aufrufen müssen, die in netstandard nicht vorhanden sind. #ifdefs helfen hier nicht. Wir würden einfach werfen, wenn die Lücken größer werden.

@davidfowl Völlig gültige Fragen - Antworten:

Meinst du bezahlten Support oder meinst du, dass wir Probleme beheben, wenn sie auftreten?

Aktive Fixes für Probleme – Wird 1.x Fixes für alle Dinge erhalten, die wir kaputt machen, oder werden wir in einigen Fällen aufgefordert, ein Upgrade für einen Fix durchzuführen? (Hinweis: Das ist ein Upgrade, das wir nicht durchführen können, bis unsere Bibliotheken wie DirectoryServices da sind ... und selbst wenn wir es können , ist es bei weitem nicht kostenlos oder sogar billig, es dauert wahrscheinlich mindestens Monate). Wir sind groß, wir sind schnell, wir finden Brüche im Rahmen. Wir haben seit Jahren für jedes Major- und Minor-Release. Unterstützung ist für uns entscheidend.

Ich denke, Sie sagen, dass Sie die neueste Version von ASP.NET Core verwenden möchten

Nein, ich möchte eine funktionierende Version und einen Weg nach vorne. Bei 1.x haben wir nur die erste Hälfte. Bis zu dieser Ausgabe wurde die zweite Art angenommen.

Wie wirkt sich das Revving von ASP.NET Core-Versionen darauf aus?

Denn wenn Sie den Support für das vollständige Framework einstellen, müssen wir eine größere Änderung vornehmen, um den Support aufrechtzuerhalten.

Wenn wir die .NET Framework-Unterstützung in 3.0 einstellen würden (wie sich die Leute in diesem Thread zu entziehen scheinen), würden Sie sich dann nicht trotzdem in derselben Sackgasse befinden?

Vielleicht? Der Punkt ist, Parität in Anwendungsfällen zu haben, bevor man den Tauchgang macht. Es ist meine Karriere, ich kann unserem Unternehmen nicht sagen, dass es abspringen soll, wenn die andere Seite uns möglicherweise nicht unterstützt. Das wäre einfach unverantwortlich von mir. Wenn unsere Anwendungsfälle im 2.x-Zeitrahmen unterstützt wurden, gibt es einen klaren Weg nach vorne, und es ist viel sicherer, auf ASP.NET Core zu setzen.

Ein weiteres Jahr ist also genug Zeit für alle?

Die absolute Zeitdauer spielt keine Rolle - es muss Anwendungsfallkompatibilität + Zeit (IMO) sein. Wenn unsere Anwendungsfälle heute funktioniert haben (z. B. AD-Authentifizierung), dann reichen 2 Jahre, ja. Aber aktuell ist das nicht der Fall, daher ist es bestenfalls verfrüht, sich darauf zu einigen, dass ein beliebiger Zeitpunkt ab jetzt in Ordnung ist.

Es kam nicht umsonst, es ist nicht "nur schneller im Kern", wir mussten das System absichtlich so entwerfen, dass es möglich war, es auf .NET Framework zum Laufen zu bringen. Auch wenn Sie es noch nicht sehen, wird die Funktionslücke zwischen den beiden größer, sobald wir uns entscheiden (und wir entschieden haben), Abhängigkeiten von APIs zu übernehmen, die noch nicht in .NET Framework vorhanden sind.

Dann nichts für ungut, aber warum sagst du das nicht einfach und schließt das Thema? Diese Aussage scheint, als gäbe es nichts mehr zu diskutieren, und unsere Zeit ist besser woanders verbracht. Wenn das nicht der Fall ist, bitte klären?

Das Hauptproblem besteht darin, dass wir unsere Workloads heute oder, wie derzeit vorgeschlagen, beim Start nicht nach netstandard portieren können. Wenn das, was wir bereits haben , nicht funktioniert, warum sollten wir uns dann um neue Funktionen kümmern? Das Team spricht ständig über Leistung (und das ist wirklich großartig), aber etwas, das ich nicht gebrauchen kann, ist wirklich nicht wichtig, um schnell zu laufen.

Als Architektur-/Plattformleiter muss ich entscheiden, welche Wetten wir eingehen. Derzeit ist dies eine schlechte Wette. Wenn Version 1 Sie unterstützt, Version 2 jedoch nicht, aber hoffentlich eines Tages , dann ist das ein wirklich schlechtes Spiel mit der Zeit und dem Geld anderer Leute. Zumindest für uns haben wir uns aufgrund der Funktionen, des Ökosystems und des Supports für .NET entschieden. Derzeit sind wir im neuen Wort von allen 3 zu 1 übergegangen. Das Ökosystem ist noch nicht da (API-Oberfläche, Bibliotheken) und der Support ist viel kürzer als wir es gewohnt sind, ohne garantierten Upgrade-Pfad und eine unbekannte Zeit dafür.

@jahmai

Der einzige Grund, der funktionierte, war, dass das vollständige Framework unterstützt wurde, da wir derzeit SignalR auf ASP.net Core ausführen (zur Entmutigung von @davidfowl ). Soweit ich das beurteilen kann, wird SignalR von Asp.net Core immer noch nicht unterstützt?

Selbst SignalR 2 wird von ASP.NET Core nicht unterstützt (obwohl die Leute es gehackt haben, damit es funktioniert). SignalR befindet sich noch in der Entwicklung und wird noch nicht einmal mit ASP.NET Core 2.0 herauskommen, es kommt später.

Jetzt sagen Sie mir, dass ich innerhalb von 12 Monaten mehr funktionslose Entwicklungsanstrengungen durchführen muss, ohne Garantie, dass ich es überhaupt schaffen werde, abhängig von einem Haufen Handbewegungen und sollte dazu in der Lage sein? Nein Danke.

Gibt es Funktionen, die Sie in ASP.NET Core 2.0 benötigen? Oder spekulieren Sie nur, dass Sie irgendwann auf den nächsten ASP.NET Core upgraden müssen und zu diesem Zeitpunkt die Dinge auf .NET Framework nicht funktionieren?

Holen Sie sich zunächst alles, was von Microsoft gebrandet ist und das heute im vollständigen ASP.net-Core-Framework verwendet wird, das nur auf ASP.net-Core arbeitet. Zweitens, finden Sie heraus, was (wenn überhaupt) das Ökosystem sonst daran hindern würde, den ASP.net-Kern wie gewünscht zu übernehmen. Dann, und nur dann, stellen Sie die Unterstützung für Netfx ein, wie dies diskutiert wird.

Als Teil von netstandard 2.0 wurde viel Arbeit geleistet, um wichtige APIs zu identifizieren, die zurückgebracht werden sollten, damit Bibliotheken, die auf .NET Framework abzielten, größtenteils binärkompatibel damit waren. Natürlich gibt es Bereiche, die einfach nicht funktionieren, wie WCF, WPF usw., aber es wird helfen, da wir einige Nachforschungen angestellt haben und ~ 60 % der Bibliotheken API-kompatibel mit Netstandard 2.0 sind (korrigieren Sie mich, wenn ich mich bei dieser Zahl irre @terrajobst) und funktioniert möglicherweise nur auf .NET Core 2.0.

Richtig, ist das nicht ASP.NET Core 1.x? Wenn die Unterstützung auf 1.x erweitert würde, wäre das nicht genug?

Ich hatte erwartet, dass .NET Standard 2.0 die stabile Plattform sein würde, die die Kompatibilität mit .NET 4.x überbrückt, daher ist es sinnvoller, LTS-Unterstützung in der Nähe zu haben. Niemand erwartet, dass 1.1/.NET v4.x in der Mitte der Veröffentlichung EOL ist, also wäre es respektvoll, LTS für die neueste Version anzukündigen, wenn sie veröffentlicht wird, und nicht die .NET 4.x-Unterstützung vor der Veröffentlichung einzustellen, nein- LTS macht man rückwirkend zu alten Versionen so.

Ich weiß, dass wir unsere .NET Core-Pakete in separaten *.Core -Paketen verwalten, damit wir in einem separaten Veröffentlichungsrhythmus bleiben können, der der neuesten .NET Core-Version folgt, sobald wir sie mit den Haupt-NuGet-Paketen zusammenführen Wir verpflichten uns zu einer stabilen Version, die wir offiziell unterstützen werden, daher müssen wir sehr zuversichtlich sein, dass wir eine Version haben, die wir auf absehbare Zeit unterstützen können, was ich von .NET Standard 2.0 erwartet habe, nicht vom aktuellen .NET Standard 1,1/1,3/1,6 Mischung. Ich erinnere mich, dass es auch eine Zeit gab, in der es ein 1.7/8-Stopp-Gap-Release geben sollte, das mit 2.0 nicht kompatibel sein würde, wodurch die .NET Standard-Versionierungserwartung gebrochen wurde, was keine Signale für eine stabile Plattform sind.

Ich habe sehnsüchtig erwartet, dass .NET Standard 2.0 dazu bestimmt ist, die begehrte hochgradig kompatible Oberfläche und die dringend benötigte Stabilität bereitzustellen.

Selbst SignalR 2 wird von ASP.NET Core nicht unterstützt (obwohl die Leute es gehackt haben, damit es funktioniert). SignalR befindet sich noch in der Entwicklung und wird noch nicht einmal mit ASP.NET Core 2.0 herauskommen, es kommt später.

Ich bin mir nicht sicher, wie Sie diese Aussage gemeint haben, aber ich glaube, sie verstärkt nur meine Bedenken.

Gibt es Funktionen, die Sie in ASP.NET Core 2.0 benötigen? Oder spekulieren Sie nur, dass Sie irgendwann auf den nächsten ASP.NET Core upgraden müssen und zu diesem Zeitpunkt die Dinge auf .NET Framework nicht funktionieren?

Ich möchte aus Gründen irgendwann zu netstandard2 wechseln. Ich muss umziehen, um meine Web-App dafür auf asp.net Core 2 zu verschieben, richtig?

Als Teil von netstandard 2.0 wurde viel Arbeit geleistet, um wichtige APIs zu identifizieren, die zurückgebracht werden sollten, damit Bibliotheken, die auf .NET Framework abzielten, größtenteils binärkompatibel damit waren. <...>

Sicher, und ich mag, was mit netstandard gemacht wird, aber wenn etwas in netstandard fehlt, können Sie es umgehen, weil Sie das vollständige Framework in Anwendungen verwenden können, die es benötigen. Wir haben jetzt eine Handvoll reiner netstandard 1.3-Bibliotheken (unsere Quelle), die gemeinsam genutzt werden: Xamarin.iOS, Xamarin.Android, net46, Asp.net Core 1.1 - weil wir fehlende Funktionalität in netstandard mit spezifischen Framework-Zielbibliotheken, einschließlich net46-Sachen, ergänzen können in unserer asp.net-Core-Web-App.

Der _ einzige _ Grund, warum wir diese Netstandard-Bibliotheken haben, ist, dass wir unsere riesige Webanwendung portieren mussten (wie ich bereits erwähnt habe). Ich würde _gerne_ unsere plattformspezifische Codebasis für andere Plattformen nicht erweitern müssen und stattdessen die Netstandard-Kette weiter nach oben bewegen. Ich möchte wirklich nicht auf Netstandard 1.3 stecken bleiben, da es keinen Pfad gibt, um zu asp.net Core 2 zu wechseln.

Aktive Fixes für Probleme – Wird 1.x Fixes für alle Dinge erhalten, die wir kaputt machen, oder werden wir in einigen Fällen aufgefordert, ein Upgrade für einen Fix durchzuführen? (Hinweis: Das ist ein Upgrade, das wir nicht durchführen können, bis unsere Bibliotheken wie DirectoryServices da sind ... und selbst wenn wir es können, ist es bei weitem nicht kostenlos oder sogar billig, es dauert wahrscheinlich mindestens Monate). Wir sind groß, wir sind schnell, wir finden Brüche im Rahmen. Wir haben seit Jahren für jedes Major- und Minor-Release. Unterstützung ist für uns entscheidend.

Ich glaube nicht, dass es ein Problem mit dem Support gibt. Ich denke eigentlich nicht, dass dies ein großes Problem wäre, und wenn es die Leute dazu gebracht hat, sich sicherer zu fühlen, eine Wette anzunehmen, dann lohnt es sich vielleicht, die Unterstützung für 1.x auf einen längeren Zeitraum auszudehnen.

Nein, ich möchte eine funktionierende Version und einen Weg nach vorne. Bei 1.x haben wir nur die erste Hälfte. Bis zu dieser Ausgabe wurde die zweite Art angenommen.

Es bedeutet nur, dass Sie auf 1.x bleiben müssen, bis alle Ihre Abhängigkeiten portiert sind, nein?

@NickCraver Alle Ihre Beschwerden beziehen sich auf Dinge, die in .NET Core und nicht in ASP.NET Core fehlen. In .NET Core 1.x und ASP.NET Core 1.x werden diese beiden Entitäten zusammen ausgeliefert, sind aber vollständig entkoppelt. Ich habe keinen einzigen Grund dafür gehört, ASP.NET Core 2.0 speziell zu verwenden, außer berechtigten Bedenken, dass v1 etwas unterstützt und v2 es nicht unterstützt. Ich denke, wir würden in einem Jahr genau dieselbe Diskussion führen, wenn es einen anderen Grund gäbe, warum Sie nicht nur auf .NET Core portieren könnten (vielleicht haben Sie während der Entwicklung von ASP.NET Core auf dem vollständigen Framework einige neue Abhängigkeiten aufgenommen, die wird nie als Beispiel portiert).

Dann nichts für ungut, aber warum sagst du das nicht einfach und schließt das Thema? Diese Aussage scheint, als gäbe es nichts mehr zu diskutieren, und unsere Zeit ist besser woanders verbracht. Wenn das nicht der Fall ist, bitte klären?

Ich antworte und antworte hier, weil ich versuche herauszufinden, warum wir .NET Framework unterstützen müssen, wenn ja, wie lange. Ich bekomme immer noch eine gemischte Stimmung in diesem Thread über diese Zeitrahmen. Außerdem gibt es eine allgemeine Befürchtung, die ich verstehen kann, wenn es darum geht, „zu ASP.NET Core 1.x verbannt zu werden“, aber nichts Konkretes in Bezug auf bestimmte Funktionen, die in 2.x benötigt werden.

Eines der wichtigsten Dinge, die ich an der Kopplung von .NET Core und ASP.NET Core mag, ist, dass es einen Teil des Versionierungs- und Benennungswahnsinns löst. Viele Leute wissen nicht einmal, dass ASP.NET Core auf .NET Framework ausgeführt wird (es verwirrt sogar Neueinsteiger in den Stack). Allerdings haben wir viele Kunden mit vielen unterschiedlichen Bedürfnissen und wir hören auf ihr Feedback.

@Mythos

Ich habe sehnsüchtig erwartet, dass .NET Standard 2.0 dazu bestimmt ist, die begehrte hochgradig kompatible Oberfläche und die dringend benötigte Stabilität bereitzustellen.

Sicher, aber wie gesagt, ASP.NET Core, .NET Core und .NET Standard in 1.x sind komplett entkoppelt. Sie können jede .NET Standard-Bibliothek in jeder Version von .NET Core verwenden, die sie unterstützt. Wenn also .NET Core 2.0 ein neues LTS ist, könnten wir immer noch erklären, dass ASP.NET Core 1.x darauf unterstützt wird.

@jahmai

Ich möchte aus Gründen irgendwann zu netstandard2 wechseln. Ich muss umziehen, um meine Web-App dafür auf asp.net Core 2 zu verschieben, richtig?

Nein, das ist nicht richtig. Sie können jederzeit zu netstandard 2 wechseln, ohne Ihre Web-App auf ASP.NET Core 2.0 zu verschieben.

Der einzige Grund, warum wir diese Netstandard-Bibliotheken haben, ist, dass wir unsere riesige Webanwendung portieren mussten (wie ich bereits erwähnt habe). Ich möchte unsere plattformspezifische Codebasis nicht für andere Plattformen erweitern müssen und stattdessen die Netstandard-Kette weiter nach oben bewegen. Ich möchte wirklich nicht auf Netstandard 1.3 stecken bleiben, da es keinen Pfad gibt, um zu asp.net Core 2 zu wechseln.

Sie müssen nicht an netstandard 1.3 festhalten. Die 2 Dinge haben nichts miteinander zu tun.

Wenn Version 1 Sie unterstützt, aber Version 2 nicht, aber _hoffentlich eines Tages_, dann ist das ein wirklich schlechtes Spiel ....

Das ist meiner Meinung nach der Kern des Problems. Wir haben Kommentare erhalten, dass _einige_ der Lücken ( DirectoryService , et. al.) bekannt sind und behoben werden. Da brauchen wir etwas Konkreteres.

Ich bin damit einverstanden, dass ASP.NET Core auf .NET Core abzielt und dass wir das 2.0-Boot verpassen, wenn die Roadmap klar ist, wann wir erwarten können, dass diese Lücken (und welche Lücken) geschlossen werden (wieder unter der Annahme, dass genügend Zeit zum Portieren vorhanden ist). 1.X wird nicht mehr unterstützt).

Aus heutiger Sicht stagniert das Problem, für das wir für WCF blockiert sind, seit Mai 2015 und wird möglicherweise nie angegangen. Dadurch sind wir effektiv gestrandet.

@davidfowl

Nein, das ist nicht richtig. Sie können jederzeit zu netstandard 2 wechseln, ohne Ihre Web-App auf ASP.NET Core 2.0 zu verschieben.

Exzellent. In diesem Fall, solange Microsoft sicherstellt, dass 1.x unterstützt wird (alle Arten von Fehlerbehebungen und Betriebsunterstützung), bis es Kunden einen geeigneten 2.x-Migrationspfad (z. B. SignalR) bietet, kann ich meine Zeit bis zu uns abwarten Benötige asp.net Core 2.

Es bedeutet nur, dass Sie auf 1.x bleiben müssen, bis alle Ihre Abhängigkeiten portiert sind, nein?

Richtig, aber das muss ein bekannter Zeitrahmen sein. Wir haben keine Daten, das einzige, was uns bisher gesagt wurde, war "nicht in 2.0" ... also ist das nicht gut. Zum Beispiel wird System.DirectoryServices seit Mitte 2015 angefordert und fehlt immer noch, wird aber oft als das meistgesuchte von Benutzern wiederholt (gefolgt von System.Drawing ). Zu sagen, dass wir .NET Standard 2.0 auf ~60 % API-Parität bringen, aber die Bits fehlen, um die Benutzer gebeten haben, sendet mit Sicherheit gemischte Signale darüber, was wichtig ist.

Alle Ihre Beschwerden beziehen sich auf Dinge, die in .NET Core und nicht in ASP.NET Core fehlen.

Das ist falsch. Ich brauche die Bits, die wir benötigen , um auf einer unterstützten Plattform ausgeführt zu werden (z. B. AD-Authentifizierung). Was fehlt, ist die Unterstützung durch letztere. Die Unterstützung für 1.x ist sicherlich mein Hauptanliegen. Wir haben keinen unterstützten Weg nach vorne oder irgendwelche Zeitpläne, wann wir einen erwarten können.

Ich denke, wir würden in einem Jahr genau die gleiche Diskussion führen

Ich glaube nicht, dass das der Fall ist. Das Problem ist, dass wir heute nicht portieren konnten. Die APIs sind nicht da. Solange es keinen einzigen Zeitpunkt gibt, zu dem wir überhaupt portieren könnten, sind Diskussionen über die Zukunft ein bisschen hinfällig. Ich würde erwarten, dass die vollständige .NET-Framework-Unterstützung in ASP.NET Core veraltet ist, sobald Parität vorhanden ist und die meisten Benutzer wechseln können. Und ich würde erwarten, dass diese Version einen langen Supportzeitraum hat, in den die Leute wechseln können.

Wenn DirectoryServices, Drawing usw. in 2.x kommen, dann großartig. Diese Version sollte .NET Framework unterstützen und eine LTS-Version sein. Und 3.x sollte die volle Framework-Unterstützung fallen lassen.

Eines der wichtigsten Dinge, die ich an der Kopplung von .NET Core und ASP.NET Core mag, ist, dass es einen Teil des Versionierungs- und Benennungswahnsinns löst. Viele Leute wissen nicht einmal, dass ASP.NET Core auf .NET Framework ausgeführt wird (es verwirrt sogar Neueinsteiger in den Stack). Allerdings haben wir viele Kunden mit vielen unterschiedlichen Bedürfnissen und wir hören auf ihr Feedback.

Fair genug, aber all der Wahnsinn dort ist zweitrangig zu "funktioniert es überhaupt?". Derzeit ist das ein festes Nein. ASP.NET und .NET Core/Standard/was auch immer sind zwei verschiedene Dinge innerhalb von Microsoft (und das verstehe ich total), aber für Entwickler ist es immer noch eine Plattform. Die ASP.NET-Seite benötigt die APIs, um für viele nützlich zu sein, und sie sind noch nicht da. Dieser Schritt reduziert die verfügbaren APIs weiter. Das ASP.NET-Team bekommt vielleicht die, die es will, aber es geht auf Kosten derer, die wir brauchen.

@ctolkien @NickCraver

Das ist meiner Meinung nach der Kern des Problems. Wir haben Kommentare erhalten, dass einige der Lücken (DirectoryService usw.) bekannt sind und behoben werden. Da brauchen wir etwas Konkreteres.

Richtig, aber das muss ein bekannter Zeitrahmen sein. Wir haben keine Daten, das einzige, was uns bisher gesagt wurde, war "nicht in 2.0" ... also ist das nicht gut. Beispielsweise wird System.DirectoryServices seit Mitte 2015 angefordert und fehlt immer noch, wird aber häufig als das von Benutzern am meisten gewünschte wiederholt (gefolgt von System.Drawing).

Diese Lücken hängen jedoch mit .NET Core selbst zusammen, und ich kann die Angst verstehen, nicht zu wissen, wann diese Abhängigkeiten verfügbar sein werden, und deshalb wäre es gut, uns bei der Priorisierung dieser Abhängigkeiten zu helfen. Die gute Nachricht ist, dass netstandard 2.0 und netcoreapp2.0 die Gruppenarbeit dahingehend verlegt haben, andere Bibliotheken leichter portierbar zu machen. Ich gehe davon aus, dass es nach der Veröffentlichung von 2.0 viel einfacher sein wird, andere Abhängigkeiten hervorzubringen, indem wir Codeschwaden auf unsere sehr kompatible Basis portieren.

Wird CSOM in netcore 2 laufen? Das wäre ein großer Blocker für uns und ein Bereich, von dem ich noch nichts gehört habe.

@davidfowl Ich hoffe aufrichtig, dass das auch der Fall ist, aber ich setze unser Unternehmen nicht darauf. Das Abbrechen der Unterstützung, bevor das passiert, und nicht danach, dem stimme ich absolut nicht zu. Ich denke, dass dies im 3.x-Zeitrahmen passiert, nachdem diese kritischen APIs für viele Verbraucher vorhanden sind, ist absolut gültig. Wenn sie dies tun, bevor sie bereit sind, wird unsere Adoption nur gestoppt.

Ich war auf dem Weg, 1.0 zu übernehmen, in der Annahme, dass 2.x (oder was auch immer aktiv entwickelt/gefixt wird) das vollständige Framework unterstützen würde, bis diese kritischen APIs fertig sind (ich meine es ernst – Sie wissen, wie viel Arbeit ich bereits in Bibliotheken gesteckt habe ). Aber zu diesem Zeitpunkt kann ich das bei Stack nicht tun ... es war eine schlechte Annahme. Ich kann unseren Teams nicht guten Gewissens raten, .NET Core zu verwenden, während die Zukunft eines jeden Ports so ungewiss ist. Ich wünschte wirklich, ich könnte, aber es ist das Risiko und die Schmerzen im Moment nicht wert.

@ Nick Craver

Ich würde erwarten, dass die vollständige .NET-Framework-Unterstützung in ASP.NET Core veraltet ist, sobald Parität vorhanden ist und die meisten Benutzer wechseln können. Und ich würde erwarten, dass diese Version einen langen Supportzeitraum hat, in den die Leute wechseln können.

Was ist hier das Maß für "die meisten Benutzer"? Wie lautet die Liste der Abhängigkeiten, die abgedeckt werden müssen, bis wir den Support einstellen können? Ihre Liste unterscheidet sich von anderen Benutzern auf dieser Liste. Ich gehe auch davon aus, dass einige Leute sagen werden, für immer oder bis .NET Core die .NET Framework-Parität erreicht (was einfach unrealistisch ist). Ich werde immer noch behaupten, dass ASP.NET Core 1.x für diesen Zweck gut genug ist, und wir sollten versuchen, die Unterstützung dafür bis zu diesem Zeitpunkt zu verlängern.

Das ist falsch. Ich brauche die Bits, die wir benötigen, um auf einer unterstützten Plattform ausgeführt zu werden (z. B. AD-Authentifizierung). Was fehlt, ist die Unterstützung durch letztere. Die Unterstützung für 1.x ist sicherlich mein Hauptanliegen. Wir haben keinen unterstützten Weg nach vorne oder irgendwelche Zeitpläne, wann wir einen erwarten können.

Welche ASP.NET-Komponente fehlt für dieses Szenario? Wenn Sie 1.x vs. 2.x sagen, wäre es hilfreich, wenn Sie ASP.NET Core vs. .NET Core erwähnen.

Wenn DirectoryServices, Drawing usw. in 2.x kommen, dann großartig. Diese Version sollte .NET Framework unterstützen und eine LTS-Version sein. Und 3.x sollte die volle Framework-Unterstützung fallen lassen.

Ich habe das bereits erwähnt, welche ASP.NET Core-Funktionen benötigen Sie, dass ASP.NET Core 1.x dafür nicht ausreicht?

ASP.NET und .NET Core/Standard/was auch immer sind zwei verschiedene Dinge innerhalb von Microsoft (und das verstehe ich total), aber für Entwickler ist es immer noch eine Plattform

Einverstanden, aber wir müssen die FUD zu dieser Diskussion klären, damit wir die Auswirkungen richtig bewerten können. ASP.NET Core 1.x zielt auf .NET Standard 1.x (1.0–1.6) und .NET Framework 4.5.1 ab. Das bedeutet, dass es auf jeder Plattform ausgeführt werden kann, die diese Versionen von netstandard und .NET Framework unterstützt. Das bedeutet, dass ASP.NET Core 1.x auf .NET Core 2.0 ausgeführt wird.

@schmbecker

Wird CSOM in netcore 2 laufen? Das wäre ein großer Blocker für uns und ein Bereich, von dem ich noch nichts gehört habe.

Ich habe keine Ahnung, was das ist. Ist es das https://msdn.microsoft.com/en-us/library/ff798388.aspx? Wenn dies der Fall ist, wurde keine Arbeit geleistet, um dies explizit zu unterstützen. Es könnte nur basierend auf der .NET Framework-Kompatibilität in .NET Core 2.0 funktionieren, aber ich vermute, dass es niemals auf .NET Core portiert wird (nur basierend auf meinen 5 Minuten, in denen ich es mir angesehen habe), aber ich könnte mich irren.

Was ist hier das Maß für "die meisten Benutzer"? Wie lautet die Liste der Abhängigkeiten, die abgedeckt werden müssen, bis wir den Support einstellen können? Ihre Liste unterscheidet sich von anderen Benutzern auf dieser Liste. Ich gehe auch davon aus, dass einige Leute sagen werden, für immer oder bis .NET Core die .NET Framework-Parität erreicht (was einfach unrealistisch ist). Ich werde immer noch behaupten, dass ASP.NET Core 1.x für diesen Zweck gut genug ist, und wir sollten versuchen, die Unterstützung dafür bis zu diesem Zeitpunkt zu verlängern.

Beginnen wir mit den am häufigsten fehlenden APIs – diese verursachen bei den meisten Menschen Blockaden. Für uns ist das DiretoryServices, das ist die Nummer 1. Wenn das nicht einmal da ist, ist das ein wirklich schlechtes Zeichen für die Community. Ich stimme zu, dass Listen unterschiedlich sind, aber wenn wir nicht einmal Nummer 1 enthalten ...

Welche ASP.NET-Komponente fehlt für dieses Szenario? Wenn Sie 1.x vs. 2.x sagen, wäre es hilfreich, wenn Sie ASP.NET Core vs. .NET Core erwähnen.

Ich habe das bereits erwähnt, welche ASP.NET Core-Funktionen benötigen Sie, dass ASP.NET Core 1.x dafür nicht ausreicht?

Ich meine Unterstützung für den neuesten ASP.NET Core, der Full Framework unterstützt (und daher die Bibliotheken, die ich benötige). Ich hoffe , das ist 2.x, da wir Module, Rasierseiten usw. wollen. Wir haben viele 2.x-Features verwendet. Aber es hört sich so an, als ob unsere einzige Option zu diesem Zeitpunkt 1.x ist. Wir können den Sprung von ASP.NET 5 zu ASP.NET Core und vom vollständigen Framework mit all unseren Arbeitsbibliotheken zu netcoreapp nicht in einem Zug schaffen. Es ist zu viel. Es ist zu teuer. Es ist zu riskant. Und jetzt sind wir uns nicht sicher, ob wir diesen teuren, riskanten Schritt innerhalb eines Support-Fensters machen können. Das ist eine schlechte Situation - so schlimm, dass es besser ist, sich nicht zu bewegen (wie die Dinge heute stehen). Das finde ich wirklich schade.

Welche ASP.NET-Komponente fehlt für dieses Szenario? Wenn Sie 1.x vs. 2.x sagen, wäre es hilfreich, wenn Sie ASP.NET Core vs. .NET Core erwähnen.

  • Es sei denn, es gibt eine Möglichkeit, AD-Authentifizierung/-Abfragen über ein Microsoft.Authentication.* NuGet-Paket zu verarbeiten, dann ist das eine große Sache. Ich bin derzeit im selben Boot, aber da ich .NET Core 1.1 auf .NET 462 ausführe, werde ich in der Lage sein, das durchzuziehen. Abgesehen davon, wie könnte ich AD-Gruppen und Metadaten über unterstützte Mittel abfragen? Ich habe im Corefx-Repo gesehen, dass eine Menge Arbeit an System.DirectoryServices passiert, also freue ich mich zumindest darüber.

  • System.Data.Common.DbDataAdapter / SqlClient.SqlDataAdapter . Derzeit kann ich darauf nur zugreifen, wenn ich .NET Core zusätzlich zum vollständigen .NET Framework ausführe. Ich denke, es ist eher eine Bequemlichkeitssache, da ich immer noch die DbDataReader / SqlDataReader verwenden kann.

Grundsätzlich muss ich wissen, dass es eine Garantie für EINIGE unterstützte Methode zur Handhabung der AD-Authentifizierung bei der Verwendung von ASP.NET Core 2.x gibt, ohne dass das vollständige .NET Framework erforderlich ist.

Ich habe heute viel darüber nachgedacht und stelle fest, dass meine Bedenken anders sind als die der meisten hier (nicht, dass diese Bedenken nicht genauso wichtig, wenn nicht sogar wichtiger wären).

Ich hänge immer noch an dem Anwendungsfall fest, ASP.NET Core-Pakete auf netstandard zu verbrauchen. Bis zu dieser Ausgabe war ich (vielleicht zu Unrecht) davon ausgegangen, dass netstandard das De-facto-Ziel für Bibliotheken war. Mit anderen Worten, das beabsichtigte Verhalten von Bibliotheksautoren wäre, auf netstandard abzuzielen, es sei denn, es gäbe einen zwingenden und zwingenden Grund, dies nicht zu tun. Dies gewährleistet nicht nur die Kompatibilität mit Framework, sondern auch mit anderen Plattformen wie Xamarin und UWP. Die Arbeit an .NET Standard 2.0 schien dies zu unterstützen, indem versucht wurde, die API-Oberfläche der verschiedenen Laufzeiten zu einem gemeinsamen Ziel zu vereinheitlichen, an das man nicht denken muss.

Für mich signalisiert diese Änderung etwas anderes. Zugegeben, am Ende des Tages ist ASP.NET Core nur eine Bibliothek und hat vielleicht „notwendige und zwingende Gründe“, die gemeinsame netstandard -Oberfläche nicht zu unterstützen. Aber es ist auch eine der sichtbarsten von Microsoft entwickelten .NET-Bibliotheken, und indem es sagt: „Wir wollen das Neueste und Beste, also werden wir die Unterstützung netstandard “, signalisiert es allen anderen Bibliotheksentwicklern (oder at zumindest für mich), dass sie vielleicht aufhören sollten, sich so sehr zu bemühen, netstandard zu unterstützen, und einfach anfangen sollten, die Core-Laufzeit ins Visier zu nehmen. Warum sich mit all dem Kompatibilitätskram herumschlagen, wenn Microsoft sich nicht einmal so sehr darum kümmert? .NET Core 4-Lyfe. Und vielleicht ist das das Beste – es ist sicherlich anders als ich dachte, dass wir mit mehreren Laufzeiten und einer größtenteils einheitlichen API-Oberfläche gehen würden.

Diese Besorgnis wird noch größer, wenn man bedenkt, dass ASP.NET Core viele, viele Bibliotheken enthält, die außerhalb des Kontexts von ASP.NET direkt nützlich sind. Vielleicht war es falsch anzunehmen, dass diese jemals isoliert verwendet werden sollten, aber es wäre eine schreckliche Schande, sie zu verlieren. Bibliotheksautoren, die sie verwenden möchten, müssen sich entscheiden, ihr eigenes Targeting ebenfalls auf .NET Core umzustellen oder auf netstandard zu bleiben und den Zugriff auf sie zu verlieren. Ich vermute, dass viele die frühere, weiter zersplitternde Bibliotheksunterstützung für alternative Plattformen wählen werden. Zumindest wenn ich die Kommentare hier verstanden habe, dass es zu schwierig ist, verschiedene Plattformen für die unterstützenden Bibliotheken anzusprechen.

Schließlich bin ich etwas (wenn auch etwas weniger) besorgt über die Kommentare hier, dass, sobald es möglich ist, neue APIs zu Core hinzugefügt werden, um in Verbindung mit ASP.NET zu revisieren. Insbesondere, dass diese neuen APIs es möglicherweise nie in netstandard oder .NET Framework schaffen. Ich verstehe sicherlich, dass es einige aufregende Dinge geben kann, die getan werden können, wenn die Legacy- und Kompatibilitätsbedenken fallen gelassen oder gelockert werden. Aber um ehrlich zu sein, ich habe den Eindruck gewonnen, dass das ASP.NET Core-Team oft da draußen vorprescht. Das ist nicht unbedingt eine schlechte Sache, aber es hat auch zu einer Reihe umfassenderer Entscheidungen geführt, die zurückgenommen werden mussten. Ich kann nicht umhin, mich zu fragen, ob dies und die anschließende schnelle Entwicklung der Core-Laufzeit dazu führen wird, dass die Menge der Laufzeiten im Laufe der Zeit stark gebrochen wird (und noch einmal, es ist nicht nur Windows/Framework, das zurückgelassen wird - es gibt auch Xamarin, Mono, UWP usw.).

Dieser ganze Thread hat mich veranlasst, mein Verständnis der Zukunft von .NET um .NET Core statt um netstandard herum zu orientieren. Vielleicht bin ich extrem und das wird in den kommenden Wochen nachlassen, oder vielleicht ist das sogar die beabsichtigte Position und es ist alles das Beste – so oder so, ich bin derzeit versucht, einfach loszugehen und .NET Core für mich selbst ins Visier zu nehmen Sachen und konzentriere dich nur darauf, nach allem, was ich hier gelesen habe.

@ Nick Craver

Ich meine Unterstützung für den neuesten ASP.NET Core, der Full Framework unterstützt (und daher die Bibliotheken, die ich benötige). Ich hoffe, das ist 2.x, da wir Module, Rasierseiten usw. wollen. Wir haben viele 2.x-Features verwendet.

Im Moment ist es 1.1.1 (es gibt keine Module in 2.0), Razor Pages ist gut, ein anderes ist SignalR. Das sind die 2 Dinge, die ich als Teil davon am schmerzhaftesten sehe.

Wir können den Sprung von ASP.NET 5 zu ASP.NET Core und vom vollständigen Framework mit all unseren Arbeitsbibliotheken zu netcoreapp nicht in einem Zug schaffen. Es ist zu viel. Es ist zu teuer. Es ist zu riskant. Und jetzt sind wir uns nicht sicher, ob wir diesen teuren, riskanten Schritt innerhalb eines Support-Fensters machen können. Das ist eine schlechte Situation - so schlimm, dass es besser ist, sich nicht zu bewegen (wie die Dinge heute stehen). Das finde ich wirklich schade.

Ist es trotzdem? Der Wechsel von ASP.NET Core 1.x zu 2.x oder 3.x wäre trivial, vorausgesetzt, Ihre Abhängigkeiten wurden portiert. Wenn Sie im Allgemeinen planen, zu ASP.NET Core zu wechseln, ist die Umstellung auf 1.1 ein guter erster Schritt, und Sie sparen keine Arbeit, wenn Sie dies vermeiden.

@schnickler

Grundsätzlich muss ich wissen, dass es eine Garantie für EINIGE unterstützte Methode zur Handhabung der AD-Authentifizierung bei der Verwendung von ASP.NET Core 2.x gibt, ohne dass das vollständige .NET Framework erforderlich ist.

Bis System.DirectoryServices auf .NET Core unterstützt wird, gibt es dann einen Grund, warum Sie ASP.NET Core 1.x nicht auf .NET Framework verwenden können?

Bis System.DirectoryServices auf .NET Core unterstützt wird, gibt es dann einen Grund, warum Sie ASP.NET Core 1.x nicht auf .NET Framework verwenden können?

Das mache ich gerade. Ich freue mich nur in der Hoffnung, dass ich mich nicht um das .NET Framework kümmern muss, wenn ich es nicht muss. Derzeit beschränkt es mich auf meinen Windows-Rechner, da der Namespace System.DirectoryServices.AccountManagement in Mono nicht existiert. Wird in dieser Hinsicht System.DirectoryServices.AccountManagement außerhalb der Beschränkungen von Windows verfügbar sein? Dieses eine kleine Stück zwingt mich, zwischen Computern zu wechseln, während ich mein MVC-Projekt und meine Xamarin.iOS-App lokal debugge.

Wenn Sie im Allgemeinen planen, zu ASP.NET Core zu wechseln, ist die Umstellung auf 1.1 ein guter erster Schritt, und Sie sparen keine Arbeit, wenn Sie dies vermeiden.

Ich stimme voll und ganz zu, wenn wir wüssten, dass Support da ist, bis wir auf eine andere Plattform aktualisiert haben, die funktioniert hat . Im Moment wissen wir nicht, wann die erforderlichen Bits in der .NET Core-Welt verfügbar sein werden. Wenn ich also jetzt eine zeitliche Obergrenze festlege und nicht weiß, wann diese Bits später kommen, setze ich auf ein Versprechen. Das ist das Kernproblem. Wenn wir eine unterstützte, sich überschneidende Version haben, die eine Portierung erlaubt, wäre ich bereit und würde gerne investieren. Wenn die Unterstützung eingestellt wird, bevor die APIs da sind, überspringen wir eine Glaubenslücke mit einer unbekannten Menge an Landebahn.

Ich verweise immer wieder auf DirectoryServices, weil ich weiß , dass das heute auf netcoreapp2.0 nicht funktioniert. Es wird natürlich andere Dinge geben, die wir finden, die in dasselbe Boot fallen. Wir brauchen ASP.NET Core + vollständiges Framework + Unterstützung für mehrere Jahre auf einigen Plattformen. Mit 1.x bekommen wir nicht viele Gewinne, wir bekommen eigentlich sehr wenig. Leistung ist kein großartiges Argument, da wir Seiten bereits in ~18 ms rendern und sie durch die Transportzeit in den Schatten gestellt wird. 2.0 bietet jedoch einige gute Punkte. Razor-Seiten und die Aussicht auf Plugins machen die Portierung sehr attraktiv. Soweit vertretbar.

Im Moment ist die einzige Version mit Support (1.1.x mit längerer Unterstützung, das erwarte ich nach dem Lesen dieses Threads) nicht den Umstieg wert. Es wäre im Grunde eine Menge Zeit und Mühe, dorthin zu gelangen, wo wir heute sind. 2.x bietet zumindest einige anständige Verbesserungen und Bits, die wir nutzen möchten. Sie helfen, die Umzugskosten zu rechtfertigen.

Leistung ist kein großartiges Argument, da wir Seiten bereits in ~18 ms rendern

Bei einem kleinen OT-Rant würde ich gerne wissen, wie Sie Seiten in ~ 18 ms @NickCraver rendern können . Das ist großartig

@daveaglick

Ich hänge immer noch an dem Anwendungsfall, ASP.NET Core-Pakete auf Netstandard zu konsumieren. Bis zu dieser Ausgabe war ich (vielleicht zu Unrecht) davon ausgegangen, dass netstandard das De-facto-Ziel für Bibliotheken ist. Mit anderen Worten, das beabsichtigte Verhalten von Bibliotheksautoren wäre es, auf Netstandard abzuzielen, es sei denn, es gäbe einen zwingenden und zwingenden Grund, dies nicht zu tun. Dies gewährleistet nicht nur die Kompatibilität mit Framework, sondern auch mit anderen Plattformen wie Xamarin und UWP. Die Arbeit an .NET Standard 2.0 schien dies zu unterstützen, indem versucht wurde, die API-Oberfläche der verschiedenen Laufzeiten zu einem gemeinsamen Ziel zu vereinheitlichen, an das man nicht denken muss.

Hier hat sich nichts geändert. Tatsächlich sind einige unserer Bibliotheken, die wir auf anderen Plattformen ausführen möchten, immer noch Netzstandard. Wenn Sie einige der oben genannten Punkte noch einmal lesen:

  • Microsoft.Extensions.* (Protokollierung, DI, Konfiguration, Dateianbieter usw.)
  • EntityFramework
  • SignalR-Clients (sie müssen auf .NET Framework, Xamarin, UWP usw. ausgeführt werden).

.NET Standard ist die Defacto-Methode zum Schreiben von Bibliotheken, die überall ausgeführt werden. Bibliotheksautoren sollten darauf abzielen, wenn möglich auf Netstandard abzuzielen, um die größtmögliche Plattformreichweite zu erzielen. Bibliotheksautoren müssen entscheiden, ob sie Reichweite haben wollen oder nicht. Aus diesem Grund unterstützen Bibliotheken wie JSON.NET netstandard1.x und .NET Framework 2.0. Sie gehen noch einen Schritt weiter, damit die Dinge „einfach funktionieren“, wie @JamesNK oben erwähnt hat.

Dass sich ASP.NET Core an einigen Stellen vom Netstandard entfernt, ist eher eine Aussage, dass diese APIs nicht für UWP-Anwendungen gedacht sind und wir sie dort sicherlich nicht testen (als Beispiel). Es versucht auch zu verdeutlichen, dass .NET Core und ASP.NET Core ein einzelnes Produkt sind, das zusammen versioniert wird (da es Core im Namen hat). Da ASP.NET Core 1.x sowohl .NET Core als auch .NET Framework unterstützt, war diese Nachricht ein wenig verschwommen und führte bei vielen Menschen (insbesondere neuen Entwicklern) zu Verwirrung. Wir haben dies getan, um das Bibliothekslückenproblem zu lösen.

Diese Besorgnis wird noch größer, wenn man bedenkt, dass ASP.NET Core viele, viele Bibliotheken enthält, die außerhalb des Kontexts von ASP.NET direkt nützlich sind. Vielleicht war es falsch anzunehmen, dass diese jemals isoliert verwendet werden sollten, aber es wäre eine schreckliche Schande, sie zu verlieren. Bibliotheksautoren, die sie verwenden möchten, müssen sich entscheiden, ihr eigenes Targeting ebenfalls auf .NET Core umzustellen oder auf Netstandard zu bleiben und den Zugriff darauf zu verlieren. Ich vermute, dass viele die frühere, weiter zersplitternde Bibliotheksunterstützung für alternative Plattformen wählen werden. Zumindest wenn ich die Kommentare hier verstanden habe, dass es zu schwierig ist, verschiedene Plattformen für die unterstützenden Bibliotheken anzusprechen.

Ich vermute, das sind immer noch netstandard. Welche nicht?

Ich kann nicht umhin, mich zu fragen, ob dies und die anschließende schnelle Entwicklung der Core-Laufzeit dazu führen wird, dass die Menge der Laufzeiten im Laufe der Zeit stark gebrochen wird (und noch einmal, es ist nicht nur Windows/Framework, das zurückgelassen wird - es gibt auch Xamarin, Mono, UWP usw.).

Ich denke, Netstandard wird sich weiterentwickeln, aber .NET Framework wird immer das letzte sein, das neue APIs erhält (Xamarin und Mono sind ziemlich schnell, um Dinge hinzuzufügen).

@schnickler

Das mache ich gerade. Ich freue mich nur in der Hoffnung, dass ich mich nicht um das .NET Framework kümmern muss, wenn ich es nicht muss. Derzeit beschränkt es mich auf meinen Windows-Computer, da der System.DirectoryServices.AccountManagement-Namespace in Mono nicht vorhanden ist. Wird in dieser Hinsicht System.DirectoryServices.AccountManagement außerhalb der Beschränkungen von Windows verfügbar sein? Dieses eine kleine Stück zwingt mich, zwischen Computern zu wechseln, während ich mein MVC-Projekt und meine Xamarin.iOS-App lokal debugge.

Stellen Sie sicher, dass Sie solche Probleme auf dotnet/corefx melden. Anzunehmen, dass Ihre Abhängigkeiten portiert werden (es sei denn, es ist sehr beliebt), ist das Falsche.

@davidfowl Frage: Ich möchte Datei -> Neues Projekt mit ASP.NET Core 2.0 und mich gegen AD authentifizieren. Wird dies möglich sein? Ich kann mir einfach nicht vorstellen, dass eine Microsoft-Plattform ohne diese Möglichkeit ausgeliefert wird.

Ich bin mit allem einverstanden, aber ich sehe nicht, wie sich diese Entscheidung auf das auswirkt, was Sie gesagt haben. Ich will all die gleichen Dinge

Durch das Einstellen der Unterstützung für .NET v4.x wird ein beliebter Migrationspfad beendet und das .NET-Ökosystem noch weiter fragmentiert und viele Entwickler und Organisationen daran gehindert, es zu übernehmen, was den breiteren Community-Pool an Wissen und Investitionen in ASP verringern wird. NET Core, da viele .NET-Entwickler ihre bestehenden ASP.NET v4.x-Codebasen auf unbestimmte Zeit unterstützen müssen (für deren Arbeit sie in Vollzeit bezahlt werden).

Je kleiner der Marktanteil von .NET Core ist, desto geringer ist die Priorität für Bibliotheksbetreuer, es zu unterstützen, und einige werden es wahrscheinlich nie tun, wenn sie für eine Organisation arbeiten, die aus diesem Grund nicht mehr in der Lage sein wird, eine Migration zu ASP.NET Core in Betracht zu ziehen dies, was sich wiederum auf alle anderen auswirkt, abhängig von ihren Paketen, und so weiter. Dies sind alles Nebeneffekte der zunehmenden Belastung bei der Einführung von ASP.NET Core, da keine stabile Plattform und keine langfristigen Supportgarantien vorhanden sind und jetzt ein beliebter Migrationspfad beendet wird.

Ich glaube, jeder hier möchte, dass das .NET-Ökosystem gedeiht, aber es scheint, dass wir uns mit dem MS-Team darüber uneins sind, wie wir dies am besten erreichen können, da ich fest davon überzeugt bin, .NET v4.x so früh vor einer bekannten Menge fallen zu lassen, hochkompatibel, stabiles LTS-Release verfügbar ist, ist ein Fehler, der sich über Jahre nachteilig auswirken wird.

@davidfowl Danke - dein Kommentar hilft sehr. Ich hatte (anscheinend falsch) festgestellt, dass die meisten/alle unterstützenden Bibliotheken im Rahmen dieser Änderung von netstandard abgezogen wurden. Ich benutze ziemlich viele und kenne andere, die das auch tun, also ist es eine willkommene Nachricht zu hören, dass sie es nicht sind.

@NickCraver , welche Art von Authentifizierung verwenden Sie heute gegen AD? OpenIdConnect, WsFed, NTLM, andere?

@Tratcher AD-Authentifizierung über DirectoryServices (wir müssen die Gruppenmitgliedschaft usw. abfragen - die Standardbits)

@mythz Ich denke, das ist vernünftig, und ich denke, die Verlängerung der Support-Lebensdauer von ASP.NET Core 1.x würde ausreichen, um die meisten Fälle abzudecken.

Ich verstehe, warum Sie diese Entscheidung irgendwann treffen müssen, aber auch ich glaube, dass es verfrüht ist und wäre am glücklichsten mit:

  • ASP.NET Core 2.x ist LTS und das letzte, das Full Framework unterstützt (da wir uns bereits in der Vorschau befanden, sind Sie sicherlich nicht allzu weit entfernt), und SignalR folgt später im Jahr und unterstützt es, sodass es das Zielframework für den Sprung ist von ASP.NET zu ASP.NET Core
  • 3.x stellt die Unterstützung für Full Framework ein und wird freigegeben, wenn die wichtigsten Abhängigkeiten migriert werden

Die einfache Erweiterung der Unterstützung für ASP.NET Core 1.1 wäre meiner Ansicht nach nicht ausreichend, da diese Plattform nicht ausgereift/akzeptiert genug ist, um ein Ziel für viele ASP.NET-Migrationen zu sein (in meinem Fall ist SignalR der Blocker).

Nur zum Spaß habe ich versucht, EntityFramework 6 zu verwenden – das ich in ASP.NET Core 1.0-Apps, an denen ich gearbeitet habe, massiv verwendet habe – mit den neuesten nächtlichen Builds von preview2 .NET Core. Erraten Sie, was...

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <NetStandardImplicitPackageVersion>2.0.0-*</NetStandardImplicitPackageVersion>
    <RuntimeFrameworkVersion>2.0.0-preview2-002093-00</RuntimeFrameworkVersion>
    <PackageTargetFallback>net45;net461</PackageTargetFallback>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="EntityFramework" Version="6.1.3" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.0-*" />
  </ItemGroup>

</Project>

image

Hören Sie auf, so zu tun, als würden Assemblys, die für das vollständige Framework entworfen und kompiliert wurden, unter .NET Core einwandfrei funktionieren: Triviale Fälle (Lesen Sie Hallo-Welt-Apps) werden wahrscheinlich funktionieren, aber in vielen Fällen werden Sie am Ende durch fehlende APIs oder nicht funktionierende APIs blockiert .

Was absolut schrecklich ist, ist, dass Sie erst zur Laufzeit feststellen werden, dass es nicht funktioniert. In einigen Fällen wird es überhaupt nicht offensichtlich sein. Beispielsweise unterstützt SqlClient .NET Core weder die Eintragung von Umgebungstransaktionen noch verteilte Transaktionen mit TransactionScope : selbst wenn Sie einen Weg finden, EF 6 zum Laufen zu bringen, Ihre TransactionScope s wird überhaupt nicht effektiv sein und Ihre DB-Aufrufe werden nicht die Isolationsstufe verwenden, die Sie benötigen.

Ich halte es für notwendig, hier meinen Senf dazuzugeben, was meine Bedenken bezüglich dieses Schrittes anbelangt. Wir haben eine Desktop-Anwendung, die hauptsächlich Windows Forms mit einigen der neueren Bereiche ist, die in WPF entwickelt wurden. In diese Anwendung wurden über 15 Jahre investiert, und es wird Jahre dauern, sich vollständig von WinForms zu entfernen. Ich wünschte, das wäre nicht der Fall, aber es ist so. Wir haben daran gearbeitet, mehr Modularität in die Codebasis einzubauen, damit wir die Geschäfts- und Datenzugriffsebenen über eine neuere Webschnittstelle und die vorhandene WinForms-Anwendung nutzen können. Ich hatte vor, für unsere neuere Webanwendung sehr bald zu ASP.NET Core zu wechseln, aber wie ich gerade gesagt habe, muss ich einen Großteil unserer vorhandenen Codebasis verbrauchen, die auf .NET v4.6.x abzielt. Ich weiß sicher, dass wir System.Drawing und System.Security.Cryptography verwenden. Wir nutzen TransactionScope auch auf die oben erwähnte Weise intensiv.

Ich habe mich sehr darauf gefreut, einige der Vorteile von ASP.NET Core zu nutzen, wie z. B. die Möglichkeit, Bereiche unserer Webanwendung in separate Assemblys zu kapseln, ohne mich auf MEF verlassen zu müssen, um alles zusammenzuführen. Es gibt viele zusätzliche Gründe, aber das ist es, was es wirklich schön macht. Wenn ich unsere Anwendung jedoch auf ASP.NET Core umstelle, bleibe ich wahrscheinlich auf absehbare Zeit bei 1.x hängen, da wir die Portabilität unseres Back-End-Codes mit WinForms aufrechterhalten müssen. Ich habe mich hauptsächlich auf das Webprodukt konzentriert, daher kann ich Ihnen nicht sagen, wo wir uns in Dinge wie WMI usw. einklinken und ob dies die Frage der Portabilität beeinflusst, aber ich weiß, dass wir uns innerhalb unserer Codebasis befinden. Wir befinden uns gerade in einer wirklich interessanten Phase, und das Letzte, was ich tun möchte, ist, alle Webversionen unserer Funktionen auf ASP.NET MVC 5 zu entwickeln und eine Menge neuen Legacy-Codes zu sammeln, der irgendwann portiert werden muss zukünftiges Unterfangen.

Ich bin mir sicher, dass wir viele Verwendungen haben werden, die uns davon abhalten, auf .NET Standard abzuzielen, selbst wenn/wenn wir WinForms nicht mehr verwenden. Wir sind ein Microsoft-Partner und arbeiten für unser Produkt auf verschiedene Weise direkt mit Microsoft zusammen, daher möchte ich nicht zu sehr ins Detail gehen, was wir hier tun, aber ich würde mich über eine privatere Diskussion mit @ freuen. @davidfowl , wenn Sie weitere Einzelheiten zu unserer Arbeit benötigen. Ich werde auch auf der MS Build sein und könnte mich dort mit jedem von Ihnen treffen und mit ihm sprechen, wenn Sie anwesend sind.

Ich denke, Sie haben noch nicht in Betracht gezogen, dass Unternehmen Ihren Stack mit dieser Art von Herausforderungen verwenden. Vollständiger Haftungsausschluss: Ich beabsichtige, den zuvor erwähnten Portabilitätsanalysator auszuführen, um zu sehen, wo wir tatsächlich feststecken, weil wir diese Portabilität innerhalb unserer Codebasis aufrechterhalten müssen. Ich stelle Ihnen gerne eine Liste aller .NET Framework-APIs zur Verfügung, die diese Prüfung nicht bestehen.

Mouahaha. Ich bin mir nicht sicher ob ich lachen oder weinen soll...

Hier ist der vom ApiPort-Analysetool generierte Bericht für meine triviale 23-zeilige EF 6-App, die nicht funktioniert:

image

Cross-Compiling ist ein Mehraufwand, der mit den Kunden- und Produktanforderungen in Einklang gebracht werden muss. Aus diesem Grund möchten wir dieses Feedback erhalten, damit wir konkreter definieren können, wie die Landschaft sowohl für unsere Kunden als auch für uns aussieht, während wir ASP.NET Core weiterentwickeln.

Gab es vor der Eröffnung dieser Ausgabe einen Feedback-Prozess?

Wir sprechen alle über Zeitrahmen und Unterstützung für 1.1, aber die Tatsache, dass ASP.NET Core das vollständige Framework überhaupt fallen lässt, hat mich sehr überrascht.

Mein Verständnis war, dass das Kernframework ein plattformübergreifendes Spiel war, ein neues Framework, das aus einer Teilmenge des vollständigen Frameworks besteht, das nicht an Windows gekoppelt ist. Die Version 2.0 war die, auf die wir alle gewartet haben, wo wir die meisten APIs zurückbekommen.

ASP.NET Core war das Hundefutter für dieses neue Framework, ein neues Webframework, das von einer so kleinen Oberfläche von Framework-APIs abhängig war, dass es überall ausgeführt werden konnte.

Ich hatte erwartet, dass, sobald das Kern-Framework eine enge Parität mit dem vollständigen Framework erreicht hat, alle neuen APIs zu Netstandard hinzugefügt werden und es schließlich in beide Frameworks schaffen würden. Wir würden alle auf Netstandard abzielen und alles wäre ein Regenbogen und ein Einhorn.

Jetzt zu finden, dass ASP.NET nicht einmal den Netstandard dogfood und Framework-spezifisch wird, eh :/

@rohatsu

Die einfache Erweiterung der Unterstützung für ASP.NET Core 1.1 wäre meiner Ansicht nach nicht ausreichend, da diese Plattform nicht ausgereift/akzeptiert genug ist, um ein Ziel für viele ASP.NET-Migrationen zu sein (in meinem Fall ist SignalR der Blocker).

Was wäre, wenn SignalR auf ASP.NET Core 1.x funktionieren würde? Was ist noch unausgereift an der Plattform, die Sie benötigen?

@millman82 Danke, dass du das geteilt hast. Es hört sich so an, als würden Sie bei der Version hängen bleiben, bevor die .NET Framework-Unterstützung für eine Weile eingestellt wurde. Einige der Vorschläge hier, bei denen wir 2.x-kompatibel halten und 3.x fallen lassen, funktionieren möglicherweise nicht einmal für Sie. Warum bleiben Sie nicht einfach bei ASP.NET Core 1.x? Was fehlt noch, was Sie in Ihrem Hafen brauchen? Oder ist es nur die gleiche Sorge wie bei @NickCraver (dass 2.x es nicht unterstützt, macht Sie nervös, wenn Sie darauf wetten).

@jkells

Ich hatte erwartet, dass, sobald das Kern-Framework eine enge Parität mit dem vollständigen Framework erreicht hat, alle neuen APIs zu Netstandard hinzugefügt werden und es schließlich in beide Frameworks schaffen würden. Wir würden alle auf Netstandard abzielen und alles wäre ein Regenbogen und ein Einhorn.

Das ist nicht weit hergeholt, es fehlt nur die Zeitkomponente. Wird es schließlich in alle Rahmenbedingungen schaffen, die jeder nach seinem eigenen Zeitplan versendet.

Jetzt zu finden, dass ASP.NET nicht einmal den Netstandard dogfood und Framework-spezifisch wird, eh :/

Ein Teil davon zielt immer noch auf netstandard ab, wie mehrfach in diesem Thread erwähnt wurde.

Warum bleiben Sie nicht einfach bei ASP.NET Core 1.x?

Sie können nicht - es wird 1 Jahr nach der Veröffentlichung von 2.0 nicht mehr unterstützt (vorausgesetzt, 2.0 ist das nächste LTS).

@davidfowl Es ist definitiv ein großer Teil davon. Wir verwenden auch OData und SignalR in unserer aktuellen Webanwendung, und das muss in ASP.NET Core sein, bevor wir wechseln können. Was ich jedoch nicht möchte, ist, in der Schwebe zu bleiben, wenn die Unterstützung für ASP.NET Core 1.x eingestellt wird und es keinen Migrationspfad mit den von uns verwendeten Frameworkteilen gibt, die derzeit nicht unterstützt werden. Ich gehe davon aus, dass ASP.NET Core ASP.NET en gros ersetzen wird. Es mag irgendwo auf der Straße sein, aber es kommt. Da ich weiß, dass ich es hassen würde, unsere Benutzeroberfläche jetzt in ASP.NET MVC 5 neu zu schreiben (wir haben jetzt ein paar Dinge dort, aber es ist leicht zu verschieben, weil es klein ist), nur um es ein paar Jahre später erneut in ASP.NET Core neu zu schreiben sobald das Lebensende für ASP.NET erreicht ist.

Wir könnten uns möglicherweise darauf einstellen, schwer verbrannt zu werden, wenn dieser Migrationspfad nicht vorhanden ist, wenn EOL von ASP.NET Core 1.x eintrifft, wenn es in der Zwischenzeit erweitert wird, wenn wir jetzt auf Core 1.x abzielen. Wir könnten wahrscheinlich einiges davon mit Mikrodiensten umgehen, aber das hat natürlich seine eigenen Bedenken.

@ctolkien

Sie können nicht - es wird 1 Jahr nach der Veröffentlichung von 2.0 nicht mehr unterstützt (vorausgesetzt, 2.0 ist das nächste LTS).

Nehmen Sie für eine Sekunde an, dass es nicht aus dem Support ist, wenn 2.0 fällt. Ist das nicht genug?

Was ich jedoch nicht möchte, ist, in der Schwebe zu bleiben, wenn die Unterstützung für ASP.NET Core 1.x eingestellt wird und es keinen Migrationspfad mit den von uns verwendeten Frameworkteilen gibt, die derzeit nicht unterstützt werden

Ersetzen Sie in diesem Satz 1.x durch 2.x. Glauben Sie, dass in einem Jahr alle Ihre Abhängigkeiten portiert wären?

Ersetzen Sie in diesem Satz 1.x durch 2.x. Glauben Sie, dass in einem Jahr alle Ihre Abhängigkeiten portiert wären?

Überhaupt nicht, aber ich würde erwarten, dass sie es wären, wenn sie nicht mehr auf .NET Full abzielen könnten. Ich verstehe, warum Sie das vorantreiben möchten, aber ich glaube nicht, dass Sie erwarten können, dass Unternehmen etwas übernehmen, das aus dem Support fällt, ohne die Möglichkeit, auf eine neuere Version umzusteigen, weil die fehlenden Abhängigkeiten nicht portiert wurden.

Ich glaube nicht, dass Sie erwarten können, dass Unternehmen etwas übernehmen, das aus dem Support fällt, ohne die Möglichkeit, auf eine neuere Version umzusteigen, weil die fehlenden Abhängigkeiten nicht portiert wurden.

Warum sollte es aus der Unterstützung fallen? In meiner hypothetischen Welt würden wir ASP.NET Core 1.x auf .NET Framework länger unterstützen.

Warum sollte es aus der Unterstützung fallen? In meiner hypothetischen Welt würden wir ASP.NET Core 1.x auf .NET Framework länger unterstützen.

Meine Frage ist wie lange noch? Ist das Team außerdem groß genug, um die notwendigen Abhängigkeiten wie SignalR und OData auf ASP.NET Core 1.x zu bringen und den Support aufrechtzuerhalten, bis alle diese fehlenden Abhängigkeiten tatsächlich portiert wurden? Scheint, als würde es den zuvor vorgebrachten Argumenten widersprechen, warum Sie die vollständige Unterstützung von .NET jetzt einstellen möchten. Ehrliche Frage...

Meine Frage ist wie lange noch? Ist das Team außerdem groß genug, um die notwendigen Abhängigkeiten wie SignalR und OData auf ASP.NET Core 1.x zu bringen und den Support aufrechtzuerhalten, bis alle diese fehlenden Abhängigkeiten tatsächlich portiert wurden? Scheint, als würde es den Argumenten widersprechen, die früh vorgebracht wurden, warum Sie die vollständige Unterstützung von .NET jetzt einstellen möchten. Ehrliche Frage...

Ich werfe eine Zufallszahl raus, 3 Jahre. Das ASP.NET-Team besitzt die Odata-Integration nicht, das Odata-Team jedoch, daher kann ich nicht für sie antworten. Was SignalR betrifft, denke ich, dass es möglich wäre, auf ASP.NET Core 1.x abzuzielen.

Das Problem, das ich sehe, ist, dass jede Person einen anderen Satz von "fehlenden Abhängigkeiten" hat, was es unmöglich macht, darüber nachzudenken, wann es überhaupt "in Ordnung" ist, die .NET Framework-Unterstützung für alle einzustellen. Es ist auch wahrscheinlich, dass einige dieser Abhängigkeiten niemals portiert werden (wie CSOM).
Wenn Sie im 1.x-Zug sind, erhalten Sie natürlich Fehlerkorrekturen und kleinere Funktionen, aber der Großteil der Arbeit würde immer noch in der neuesten Version von ASP.NET Core stattfinden.

Außerdem hindert Sie nichts davon daran, .NET Core 2.0 oder .NET Standard 2.0 mit ASP.NET Core 1.x zu verwenden. Ich möchte nur sicherstellen, dass sich jeder dessen bewusst ist, da dieser Thread ständig ASP.NET Core mit .NET Core zusammenführt (was einer der Gründe ist, warum wir nur .NET Core anvisieren möchten).

Das Problem, das ich sehe, ist, dass jede Person einen anderen Satz von "fehlenden Abhängigkeiten" hat, was es unmöglich macht, darüber nachzudenken, wann es überhaupt "in Ordnung" ist, die .NET Framework-Unterstützung für alle einzustellen.

Wenden Sie sich an das Ökosystem, um herauszufinden, was die Liste ist (nein, diese Ausgabe ist nicht der richtige Ort dafür). Wenn es sich um eine Microsoft-eigene Abhängigkeit handelt, portieren Sie sie. Wenn dies nicht der Fall ist, wenden Sie sich an den Eigentümer, um ihn über die Pläne zu informieren und mit einem Migrationsleitfaden zu unterstützen (wenn er nichts unternimmt, ist Microsoft nicht schuld). Unterstützen Sie in der Zeit, die für diesen Prozess benötigt wird, ASP.net Core 1.x. Ich sehe keinen anderen Weg, um Ihre Ziele zu erreichen, ohne viele Leute zu verärgern. Dies ist eine große Sache, die vorgeschlagen wird, die ein hohes Maß an Sorgfalt und Aufmerksamkeit erfordert, um richtig zu handeln.

Ich persönlich denke, dass es viel mehr Verwirrung um .NET Framework vs. .NET Standard vs. .NET Core gibt. Als ich sah, dass ich auf .NET Framework abzielen könnte, habe ich nie gesagt: „Aber das ist ASP.NET Core, also warum kann ich .NET Framework verwenden?“. Die Unterschiede zwischen den oben genannten sind für die meisten Ihrer Kunden weitaus verwirrender. Ich liebe alles, was ASP.NET Core tut. Ich liebe auch die Richtung mit .NET in Bezug auf Plattformunabhängigkeit. Ich denke nur, dass der Bereich der Verwirrung falsch angegeben ist. Ich würde sagen, dass die Mehrheit Ihrer Benutzerbasis eine gewisse Menge an Code haben wird, der aufgrund der Art dessen, was er tut, und der APIs, auf die er innerhalb des Frameworks abzielt, nicht portierbar ist.

Ich bevorzuge es, innerhalb von .NET Core und .NET Standard und .NET Framework auf die API-Parität hinzuarbeiten. Finden Sie auch heraus, welches Ziel die Leute anstreben sollten. Wie ich, glaube ich, bereits gesagt habe, fühlt sich .NET Standard wie ein Pflaster an, vielleicht auf eine etwas andere Art und Weise. Irgendwann würde ich erwarten, dass .NET Core die einzige „Framework“-Option ist, und wenn das passiert, bleiben .NET Framework und .NET Standard auf der Strecke. Ich selbst, und ich denke, die meisten, die sich seit der Ankündigung zu Wort gemeldet haben, würden gerne weiterhin von der Arbeit profitieren, die Sie auf der ASP.NET Core-Seite leisten, ohne die Freiheit zu haben, was sie ihren Code obendrauf ausführen entfernt zu werden.

Ich denke, dass Fälle, die als außergewöhnlich betrachtet werden, wie meiner, wo ich von Dingen wie WMI abhängig bin, nicht so außergewöhnlich sind, wie das Team vielleicht denkt. Auch hier werde ich die Nachforschungen anstellen und sehen, was fehlt (obwohl mich der Beitrag mit falschen Portabilitätsergebnissen ein wenig besorgt über die Genauigkeit macht) und ich werde Ihnen das gerne in einem privateren Medium mitteilen.

Unterm Strich sind wir leidenschaftlich dabei, weil wir es nutzen wollen.

Ich persönlich denke, dass es viel mehr Verwirrung um .NET Framework vs. .NET Standard vs. .NET Core gibt. Als ich sah, dass ich auf .NET Framework abzielen könnte, habe ich nie gesagt: „Aber das ist ASP.NET Core, also warum kann ich .NET Framework verwenden?“. Die Unterschiede zwischen den oben genannten sind für die meisten Ihrer Kunden weitaus verwirrender. Ich liebe alles, was ASP.NET Core tut. Ich liebe auch die Richtung mit .NET in Bezug auf Plattformunabhängigkeit. Ich denke nur, dass der Bereich der Verwirrung falsch angegeben ist. Ich würde sagen, dass die Mehrheit Ihrer Benutzerbasis eine gewisse Menge an Code haben wird, der aufgrund der Art dessen, was er tut, und der APIs, auf die er innerhalb des Frameworks abzielt, nicht portierbar ist.

Wir haben viele Kunden und wir haben neue Entwickler, die .NET noch nie in ihrem Leben gesehen haben. Wir müssen allen gerecht werden, denn das versuchen wir als Microsoft zu tun. Leute, die auf .NET Framework laufen, wissen, lieben und verstehen, dass es funktioniert, also stellen Sie sicher, dass Sie verstehen, dass ASP.NET Core auf .NET Framework läuft, aber als neuer Entwickler, der sich der Plattform nähert, würde ich hoffen, das nie zu erwähnen, da es die Geschichte im Vergleich dazu trübt etwas wie go oder node (die zu diesem Zeitpunkt so ziemlich 0 Vermächtnisse haben).

Ich bevorzuge es, innerhalb von .NET Core und .NET Standard und .NET Framework auf die API-Parität hinzuarbeiten. Finden Sie auch heraus, welches Ziel die Leute anstreben sollten. Wie ich, glaube ich, bereits gesagt habe, fühlt sich .NET Standard wie ein Pflaster an, vielleicht auf eine etwas andere Art und Weise. Irgendwann würde ich erwarten, dass .NET Core die einzige „Framework“-Option ist, und wenn das passiert, bleiben .NET Framework und .NET Standard auf der Strecke. Ich selbst, und ich denke, die meisten, die sich seit der Ankündigung zu Wort gemeldet haben, würden gerne weiterhin von der Arbeit profitieren, die Sie auf der ASP.NET Core-Seite leisten, ohne die Freiheit zu haben, was sie ihren Code obendrauf ausführen entfernt zu werden.

Diese Dinge passieren alle parallel. ASP.NET Core hört nicht auf, an Features zu arbeiten, bis „alles“ von .NET Framework auf .NET Core portiert wurde. ASP.NET wird weiterhin innovativ sein und APIs nutzen, die auf .NET Core verfügbar sind, da wir sie als Teil derselben Box liefern.

Ich sehe ein paar Trendideen in diesem Thread von:

  • Ich möchte, dass Sie .NET Framework für immer unterstützen.
  • Ich möchte, dass Sie .NET Framework unterstützen, bis die Abhängigkeiten, die ich für meine Anwendung benötige, portiert sind.
  • Ich brauche nur noch 1 Jahr, das reicht mir, um die .NET Framework-Unterstützung (ASP.NET Core 3.x) einzustellen.

Hinzu kommt, dass wir keine Ankündigung geschrieben haben (was unser Fehler ist), aber eine kommt (ich verspreche es, ich gebe dem Wochenende die Schuld).

Ich weiß auch nicht, wie die API-Parität für die meisten Leute hier aussieht, ich vermute, dass sie für verschiedene Leute unterschiedlich ist. .NET Framework ist eine über 15 Jahre alte solide, zuverlässige Unternehmenstechnologie, die an Windows gebunden ist.
.NET Core wurde entwickelt, um moderne, leichte, plattformübergreifende Mikrodienste zu schreiben, und hat sich langsam weiterentwickelt, um kompatibler zu sein, sodass das Portieren von Bibliotheken einfacher wurde. Allerdings weiß ich nicht, was es bedeutet, sich .NET Framework in Bezug auf Kompatibilität zu nähern, oder ob dies überhaupt ein Ziel ist (war es ursprünglich nicht). Irgendwann können Sie ASP.NET Core nicht mehr auf .NET Framework verwenden, und es gibt einige Abhängigkeiten, die nicht umgeschrieben werden können und nicht mit .NET Core kompatibel sind. Anwendungen müssen dies berücksichtigen, wenn sie (in naher Zukunft) unter Berücksichtigung von ASP.NET Core entwickelt werden.

In Bezug auf die Projekte, an denen ich arbeite, wäre ein viel längerer Zeitraum der Unterstützung für 1.1 eine anständige Milderung. Es ist unwahrscheinlich, dass wir Netfx-Abhängigkeiten in 1 Jahr fallen lassen können, aber viel wahrscheinlicher mit den +3 Jahren, die Sie als Strohmann vorgeschlagen haben. Es wäre wirklich schön, eine Veröffentlichung zu haben, bei der zuerst alles auf der 2.0-Ebene zusammenkommt - das ist der Punkt, an dem alles einfacher zu portieren sein sollte! Ich spreche nur für eine Organisation, aber "2.0 wird ein LTS-Release sein; 3.0 wird netfx fallen lassen" wäre für uns im Grunde ein normales Geschäft und kein Grund für FUD.

Ich möchte auch wiederholen, was @PureKrome über die Wertschätzung dieses Engagements gesagt hat, es war eine sehr informative Diskussion.

Zum Thema Parität – ich hatte zuvor angenommen, dass .net Core sich niemals den .net Framework-Kompatibilitätsebenen annähern würde, aber dass dies in Ordnung wäre, da asp .net Core weiterhin beide unterstützen würde.

Ich denke, dass wir als Community .net Core grundsätzlich verwenden, um asp.net Core zu verwenden, nicht für seine eigenen Verdienste. Wie Sie sagten, handelt es sich um ein Produkt, und ich dachte, der Kern von clr wäre ein optionaler Teil dieses Produkts mit Vor- und Nachteilen, falls ausgewählt.

Nachdem ich eine Nacht darüber geschlafen habe -

Ich persönlich halte es für eine gute Idee, das alte .net-Framework hinter sich zu lassen und das bestmögliche Web-Framework für die moderne Runtime zu schreiben.

Aber Sie wissen, dass es definitiv riskant ist und Sie vielleicht einige Ihrer Kunden hier auf dem Weg verlieren (ich hoffe nicht - aber ich berate viel - und .NET Core ist für viele Unternehmen derzeit unerreichbar - hoffen wir 2.0 ändert das).

..und ja - die Kommunikation drum herum war (wie immer) etwas, das man verbessern kann (höflichste Version dieses Satzes für einen Deutschen) ;)

+1

Ich persönlich halte es für eine gute Idee, das alte .net-Framework hinter sich zu lassen und das bestmögliche Web-Framework für die moderne Runtime zu schreiben.

Ich stimme stark zu. Meine Hoffnung war, dass dies eine allmähliche Änderung gewesen wäre, z. B. Kestrel würde die Unterstützung zuerst für perf einstellen (http.sys-basiertes Hosting bleibt), dann folgt mvc/* für API- und Funktionsverbesserungen, während Portierungs-/Kompatibilitätstestbemühungen für netstandard2.0 beginnen.

Exzellent. In diesem Fall, solange Microsoft sicherstellt, dass 1.x unterstützt wird (alle Arten von Fehlerkorrekturen und >Betriebsunterstützung), bis es Kunden einen geeigneten 2.x-Migrationspfad anbietet (z. B. SignalR), dann bin ich >wohl damit, meine Zeit abzuwarten bis wir asp.net core 2 brauchen.

+1

kann nur auf .NET Core portiert werden (vielleicht haben Sie während der Entwicklung von ASP.NET Core auf dem vollständigen Framework einige neue Abhängigkeiten als Beispiel genommen, die niemals portiert werden).

Völlig einverstanden.
Im Moment finde ich das eine gute Entscheidung. Ich denke, in idealen Szenarien brauchen wir mehr als 1 Jahr Support, ich weiß nicht, vielleicht 2-3 Jahre, und Informationen darüber, was portiert wird, um das Vertrauen der Community zu gewährleisten.
Keine .net 461-Unterstützung.

@dasMulli

Ich stimme stark zu. Meine Hoffnung war, dass dies eine allmähliche Änderung gewesen wäre, z. B. Kestrel würde die Unterstützung zuerst für perf einstellen (http.sys-basiertes Hosting bleibt), dann folgt mvc/* für API- und Funktionsverbesserungen, während Portierungs-/Kompatibilitätstestbemühungen für netstandard2.0 beginnen.

Wir führen nicht einmal Leistungstests auf .NET Framework durch ... Portierungstests und Verbesserungen auf .NET Core und .NET Standard werden sowieso stattfinden, das hat meiner Meinung nach keinen Einfluss darauf, ob die .NET Framework-Unterstützung eingestellt wird oder nicht. Wenn überhaupt, bringt es uns dazu, uns auf diese Szenarien zu konzentrieren, weil es das einzige Ziel ist.

@gulbanana

Es wäre wirklich schön, eine Veröffentlichung zu haben, bei der zuerst alles auf der 2.0-Ebene zusammenkommt - das ist der Punkt, an dem alles einfacher zu portieren sein sollte! Ich spreche nur für eine Organisation, aber "2.0 wird ein LTS-Release sein; 3.0 wird netfx fallen lassen" wäre für uns im Grunde ein normales Geschäft und kein Grund für FUD.

Warum brauchen Sie ASP.NET Core 2.0 (vergessen Sie .NET Standard und .NET Core 2.0)?

Wir brauchen die Funktionen in asp.net Core 2.0 nicht besonders. Ich hätte sehr gerne die einfacheren Build-Prozesse und Interop, die mit der 2.0-Welle geliefert werden. Würde das eher als „Standard“ und unterstütztes Szenario betrachtet werden als als etwas, das niemand testet oder beachtet?

Grundsätzlich mache ich mir Sorgen, wenn 1.1 zu LTS wurde, dass Probleme in achtzehn Monaten mit "Nun, Sie können dies mit der 2.0-API tun" geschlossen werden.

Wir brauchen die Funktionen in asp.net Core 2.0 nicht besonders. Ich hätte sehr gerne die einfacheren Build-Prozesse und Interop, die mit der 2.0-Welle geliefert werden. Würde das eher als „Standard“ und unterstütztes Szenario betrachtet werden als als etwas, das niemand testet oder beachtet?

Das würde natürlich funktionieren. Wie ich die ganze Zeit gesagt habe, sind die 3 Dinge heute vollständig entkoppelt. Hier ist ein Beispielprojekt, das ASP.NET Core 1.1 auf .NET Core 2.0 unter Verwendung einer Version von System.Configuration-APIs ausführt, die in ein .NET Standard 2.0-Paket portiert wurden:

https://github.com/davidfowl/AspNetCore1OnNetCore2

Ich würde dies gerne akzeptieren, wenn es eine automatische Interop-Schicht zwischen .NET Core und .NET Framework gäbe (nicht die aktuelle, die zur Laufzeit Ausnahmen auslösen kann, und keine selbst erstellten internen WebAPI-Aufrufe) – eine Art Wrapper ("WowNET"?), was uns zwingen würde, 4.6-abhängigen Code in separaten .dlls aufzubewahren, aber das Ausführen von Legacy-Versionen auf Kosten der Leistung zu ermöglichen (was im Fall von LOB-Apps nicht das Hauptanliegen ist). Meint ihr das wäre technisch möglich?

Ich frage mich auch, ob diese Änderung bedeutet, dass sich das vollständige Framework selbst dem Ende seiner Lebensdauer nähert und keine andere wichtige Rolle spielen wird, als eine Legacy-Komponente zu sein, sobald die meisten APIs auf .NET Standard umgestellt wurden.

Grundsätzlich mache ich mir Sorgen, wenn 1.1 zu LTS wurde, dass Probleme in achtzehn Monaten mit "Nun, Sie können dies mit der 2.0-API tun" geschlossen werden.

Das ist immer eine Sorge. Die Antwort ist immer "es kommt darauf an". Fehlerbehebungen werden entsprechend gewichtet, und große Funktionen fallen wahrscheinlich häufiger in diesen Eimer als nicht.

@rohatsu

Ich würde dies gerne akzeptieren, wenn es eine automatische Interop-Schicht zwischen .NET Core und .NET Framework gäbe (nicht die aktuelle, die zur Laufzeit Ausnahmen auslösen kann, und keine selbst erstellten internen WebAPI-Aufrufe) – eine Art Wrapper ("WowNET"?), was uns dazu zwingen würde, 4.6-abhängigen Code in separaten .dlls zu behalten, aber die Ausführung von Legacy auf Kosten der Leistung zu ermöglichen (was im Fall von LOB-Apps nicht das Hauptanliegen ist). Meint ihr das wäre technisch möglich?

So ähnlich https://docs.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-root , aber für .NET Core und .NET Framework. Wir haben etwas sehr Ähnliches getan, als wir ASP.NET Helios unterstützten, ein .NET Framework-Shim, das zum Boostrap von Coreclr in IIS verwendet wurde. Die Hacks, um es zum Laufen zu bringen, waren ziemlich hässlich, obwohl es eine Mischung aus COM und der Übergabe von Strukturen an die Main-Methode über string[]-Argumente war. Alles technisch machbar. Ich bin mir nicht sicher, welche Art von Genauigkeit Sie erwarten würden, da es sich nicht um die gleiche Laufzeit handelt und Sie Objekte nicht hin und her übergeben können. Sie würden auch 2 GCs, 2 Jits Tonnen mehr DLLs im selben Prozess ausführen, und ich bin mir nicht sicher, was Sie gewinnen, wenn Sie etwas außerhalb von Proc tun.

Ich frage mich auch, ob diese Änderung bedeutet, dass sich das vollständige Framework selbst dem Ende seiner Lebensdauer nähert und keine andere wichtige Rolle spielen wird, als eine Legacy-Komponente zu sein, sobald die meisten APIs auf .NET Standard umgestellt wurden.

Weit entfernt von. .NET Framework entwickelt und wird mit der Geschwindigkeit von Windows ausgeliefert, da es eine Windows-Komponente ist. Wir haben gerade .NET Framework 4.7 (https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/) mit einer Reihe neuer Funktionen veröffentlicht. Tatsache ist, dass .NET Core schneller ausgeliefert werden kann und wird, da es an nichts anderes gebunden ist, sodass APIs, Laufzeitfunktionen usw. dort zuerst angezeigt werden. Das bedeutet nicht, dass die Dinge nicht irgendwann ihren Weg zu .NET Standard und .NET Framework finden werden. Es dauert nur länger, um dorthin zu gelangen. Die Tatsache, dass .NET Framework-Updates vor Ort durchgeführt werden, ist der Grund, warum wir beim Portieren von Änderungen so vorsichtig sind. Jede Änderung kann jede Anwendung beschädigen, wenn ein Update automatisch auf eine Milliarde Computer übertragen wird 😉 . Bei .NET Core befindet sich das Framework nebeneinander, sodass sich Anwendungen für die neuere Version entscheiden müssen, um neuere Features oder Fixes zu erhalten. Da ist einfach viel mehr Freiheit.

Nur um mit den net4x-Bibliotheken abzuwägen, die wir derzeit in ASP.NET Core 1.x verwenden, das würde in 2.0 nicht funktionieren: EntityFramework 6. EFCore hat einfach zu viele fehlende Funktionen, die wir verwenden, die fehlen (z. B. Abfang-/Lebenszyklus-Hooks). Wir hängen also eine Weile an EF6 fest.

Und laut dem Beitrag von @PinpointTownes funktioniert EF6 nicht mit der aktuellen (in Entwicklung befindlichen) Version von ASP.NET Core 2.x.

@nphmuller dann würden Sie weiterhin ASP.NET Core 1.x verwenden, bis weitere Abhängigkeiten verschoben wurden (ich weiß nicht, wie viele Dinge Sie von EF Core benötigen und wie der Status ist).

@davidfowl Sicher, wenn das Supportfenster von ASP.NET Core 1.x während dieser Zeit nicht vergeht.
Das Hauptmerkmal ist das Abfangen (Lebenszyklus-Hooks). Andere fehlende Funktionen können für uns einfacher umgangen werden. Interception befindet sich in ihrem Backlog, ist aber nicht an eine Veröffentlichung gebunden. Und mein Bauchgefühl sagt mir, dass es noch eine Weile nicht umgesetzt wird.

@gulbanana : Ich denke, dass wir als Community .net Core grundsätzlich verwenden, um asp.net Core zu verwenden, nicht für seine eigenen Verdienste.

Sprich für dich. Es gibt eine Reihe von uns, für die der Hauptvorteil von .NET Core darin besteht, Windows auf dem Server zu verlassen.

Und, nehme ich an, all ihr dreckigen Mac-besitzenden Hippies. 😝

@bradwilson Und, nehme ich an, all ihr dreckigen Mac-besitzenden Hippies.

Sprich für dich selbst, einige von uns sind keine Hippies ;P

Aber ja, das Entkommen von Windows (oder wirklich IIS und http.sys) ist das, wofür ich .NET Core neben der xcopy-Bereitstellung, perf usw. möchte.

Das Isolieren von altem Code in separaten Diensten oder das Portieren auf ASP.NET Core zahlt sich aus anderen Gründen als neu und glänzend aus.

@PinpointTownes ist ein Referenzfehler. Was passiert, wenn Sie auf System.Configuration gemäß https://github.com/aspnet/Home/issues/2022#issuecomment -299810945 verweisen? EF6 gibt an, dass es keine Abhängigkeiten gibt, da alles im alten GAC/Full Framework-Bundle enthalten ist

@benaadams und @PinpointTownes der Grund für das Scheitern ist, dass System.Configuration.ConfigurationManager nicht der DLL-Name ist, den .NET Framework erwartet. Ich bin mir nicht sicher, ob der Port von System.Configuration gültig ist.

      "system.configuration.configurationmanager/4.4.0-preview2-25308-01": {
        "dependencies": {
          "System.Security.Cryptography.ProtectedData": "4.4.0-preview2-25308-01"
        },
        "runtime": {
          "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": {}
        },
        "compile": {
          "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll": {}
        }

Ja, in der Lage zu sein, Nicht-Windows-Server auszuführen, ist großartig und ein großer Vorteil ... aber ohne asp.net-Kern, was würden Sie darauf ausführen? Sogar Nancy für .net Core verlässt sich über Kestrel, UseOwin() usw. auf asp.net Core.

Ich habe mehrere Microservices erstellt, die ASP.NET Core nicht verwenden. Sie sind Dinge wie Worker-Prozesse, die eine Warteschlange abfragen, um ihre Arbeit zu erledigen.

Das ist nicht fair, wir folgen Roadmaps, und Sie haben vorher nichts darüber gesagt !!
Wie Sie bereits gesagt haben, werden wir ASP.NET Core in unserem Projekt nicht verwenden, da wir .NET 4.x-Bibliotheken benötigen.
Unsere Planung umfasst die Aktualisierung unserer Projekte auf ASP.NET Core 2, da neue Funktionen benötigt werden.
Wir brauchen ASP.NET Core 2, um auch auf .NET 4.x abzuzielen. Wenn dies nicht möglich ist, was ist mit der Unterstützung von ASP.NET Core 1.x, planen Sie, auch alle neuen Funktionen hinzuzufügen oder nur Fehler zu beheben.

Unsere Planung umfasst die Aktualisierung unserer Projekte auf ASP.NET Core 2, da neue Funktionen benötigt werden.

Welche?

@PinpointTownes ist ein Referenzfehler, was passiert, wenn Sie auf System.Configuration gemäß #2022 (Kommentar) verweisen?

Das Hinzufügen <Reference Include="System.Configuration" /> hat keine Auswirkung (d. h. es wird dieselbe Ausnahme ausgelöst), da es anscheinend nicht vom GAC gelöst werden kann (ich bin mir nicht sicher, ob es wirklich überraschend ist):

image

Ich bin mir nicht sicher, ob der Port von System.Configuration gültig ist.

Die offizielle Schlussfolgerung lautet also: Sie können eine für .NET Framework 4.x geschriebene Bibliothek nicht auf .NET Core verwenden, wenn sie System.Configuration verwendet?

@PinpointTownes Ich bin mir nicht einmal sicher, ob die Version von System.Configuration versendet wird (die im Paket). Vielleicht ist es das, vielleicht auch nicht (das ist eine Diskussion, die man auf Corefx beginnen sollte). Ich sage Ihnen nur, warum Ihre Probe so zerbrochen ist, wie sie es tat.

Hinzufügen hat keine Wirkung (dh die gleiche Ausnahme wird ausgelöst), da es scheint, dass es nicht vom GAC gelöst werden kann (nicht sicher, ob es wirklich überraschend ist, tho'):

AFAIK, es gibt keine Standardunterstützung für die GAC-Referenzen in SDK-Projekten. Unter https://github.com/dotnet/sdk/issues/987#issuecomment -286307697 erfahren Sie, wie Sie es aktivieren.

Die offizielle Schlussfolgerung lautet also … Sie können eine für .NET Framework 4.x geschriebene Bibliothek nicht auf .NET Core verwenden, wenn sie System.Configuration verwendet?

Meine Schlussfolgerung ist, dass Sie mit dem oben bereitgestellten Beispiel ein Problem auf CoreFX eröffnen sollten.

@davidfowl Danke für die Antwort
Einige benötigte Funktionen und Helfer in EF Core sind in 2.0 geplant, insbesondere für Mapping-Daten (Eigenständige Mappings)...
Wie auch immer, ich muss nur eine klare Vorstellung von der Roadmap von ASP.NET Core 1.x haben, unser Team ist verwirrt und besorgt.

Eine Sache, mit der ich persönlich zu kämpfen habe, ist die Frage „stabile Plattform“ vs. „neue Funktionen“. Einerseits wollen wir, dass die Plattform stabil, zuverlässig und kompatibel ist, andererseits will niemand auf 1.x bleiben, weil es keine 2.x-Features hat. Gibt es in ASP.NET Core 2.x wirklich überzeugende Features, die die Leute in diese Richtung ziehen, oder liegt es einfach daran, dass wir mehr Features haben als in 1.x (weil es neu und glänzend ist)?

@davidfowl Ich denke, signlarR ist eine solche Funktion, es wäre zumindest in meinem vorherigen Projekt gewesen. Ich denke jedoch, dass ein Großteil der Besorgnis auf die relativ kurzen Supportfenster für 1.1 (2018?) zurückzuführen ist, wenn den Leuten versichert würde, dass sie auf asp.net 1.1 laufen könnten, bis sie bereit sind, auf Core umzusteigen, was möglicherweise Jahre und mehr bedeutet auch für Patches abgedeckt werden, die die Leute ein wenig beruhigen würden.

Ich denke auch, dass die Unterstützung von asp.net core 1.1 auf .net core 2.0 noch mehr hervorgehoben werden sollte, es gibt den Leuten (meiner Meinung nach) einen guten Migrationspfad: asp.net 5 on 46 > asp.net core 1.x on 46 > asp.net Core 1.x auf .net Core 2.0 > asp.net Core 2 auf .net Core 2. Das wäre ein Weg, der das Risiko verringern würde, über das sich viele Leute Sorgen machen.

Ich verfolge das seit dem ersten Tag und selbst nach all diesen Diskussionen und Klarstellungen ( danke @davidfowl ) habe ich das Gefühl, dass viele von uns unter den Bus geworfen werden.

Ich verstehe die Gründe für die Loslösung vom Full/Desktop .NET-Framework. Verdammt, ich stimme sogar zu, dass dies der Weg ist, ASP.NET zu stärken, ABER ich sehe nicht, wie dies jetzt statt von Anfang an entschieden wird.

Natürlich würden wir Kunden in beiden Szenarien ernsthaft meckern, aber ich würde lieber auf das „Ich kann das neue glänzende Ding nicht gebrauchen“ setzen, als auf „Ich kann es gebrauchen, in langsam migrieren und wenn möglich ersetzen“ und einfach wetten herausfinden, dass das falsch ist.

Ich sehe nicht, wie dies jetzt statt von Anfang an entschieden wird.

Bei einer Vermutung:

Auf .NET Core 1.x konnten Sie keine vollständigen Framework-Bibliotheken ausführen, daher wäre dies ein vollständiger Bruch gewesen.

Auf .NET Core 2.x können Sie meistens Full Framework ausführen und können .NET Standard 1.x - 2.0-Bibliotheken ausführen, sodass dies keine große Unterbrechung darstellt.

Alle Probleme mit der Ausführung von Full-Framework-Bibliotheken auf .NET Core 2.0 sollten wahrscheinlich in dotnet/corefx abgelegt werden

Es ist klar, dass das Hauptszenario „moderne Web-Apps in der Cloud“ sind, die oft nicht viele Abhängigkeiten von Drittanbietern haben (oder „nur Code“-Abhängigkeiten sind).

Die meisten Diskussionen konzentrierten sich bisher auf die BCL-Verfügbarkeit, aber viele von uns sind auf Komponenten von Drittanbietern angewiesen (Low-Level-Integration mit komplexen Video-, Audio-Subsystemen zum Beispiel ...), die oft und fast immer in der .NET-Landschaft hinterherhinken sich auf niedrigere Technologien verlassen, die wahrscheinlich nicht unterstützt werden.

Mit ASP.NET Core 1 entwickeln wir unsere modernen Dienste, zielen auf den .NET-Standard für Bibliotheken ab und entscheiden uns für die Bereitstellung auf vollständigen .NET- oder .NET Core-Abhängigkeiten pro Dienst.

Ich könnte darauf wetten, denn wenn wir nicht unterstützte Funktionen/Komponenten finden, könnten wir leicht auf Full .NET abzielen. Und die Wette war auf die langfristige Plattform gerichtet, da der Verbleib bei Full .NET wie eine Entscheidung aussieht, die man in ein paar Jahren vermeiden sollte.

_Auf .NET Core 2.x können Sie meistens Full Framework ausführen und können .NET Standard 1.x - 2.0-Bibliotheken ausführen, also ist es kein großer Bruch._

@benaadams Es gibt einen großen Unterschied zwischen der Verwendung des größten Teils der BCL und der Verwendung von Bibliotheken, die für Full .NET erstellt wurden (und intern nicht unterstützte Funktionen in .NET Standard 2.0 / Typvereinheitlichung verwenden könnten).

Ich denke, diese Entscheidung hat keine Auswirkungen auf die Erleichterung der Migration zu ASP.NET Core 2.0 von ASP.NET 4?
Nicht wenige Anwendungen, die ich verwalte, könnten wirklich von einem Update auf ASP.NET Core 2.0 profitieren, aber da es keinen OWIN/Katana-Support für ASP.NET Core gibt, muss ich wohl manuell migrieren, und das ist zu viel Arbeit. @damianh schlug ähnliches in https://github.com/aspnet/AspNetKatana/issues/27 vor

Wir führen das vollständige Framework aus, da wir EF6 (für Spatial) und Verzeichnisdienste benötigen und wir auf das eigentliche SignalR warten (derzeit wird eine nicht unterstützte Version verwendet, aber es funktioniert). Ich habe seit einiger Zeit keine anderen Blocker mehr überprüft, aber wahrscheinlich gibt es noch mehr.

Wie ich es verstehe, werden wir jetzt daran gehindert, zu asp.net Core 2.0 zu wechseln und signalr zu bekommen, wenn es herauskommt.

Wir sind seit dnx, RC1 bis RC2 und project json bis csproj dabei und schließlich fühlte es sich an, als wären wir aus dem Gröbsten heraus ... jetzt nicht so sehr.

Ich kann verstehen, dass diese Änderung irgendwann kommen wird, aber ist dies wirklich die Zeit dafür, wenn der Kern von asp.net versucht, Fahrt aufzunehmen? Außerdem sagt mir mein Bauchgefühl, dass EF Core noch nicht ausgereift genug ist (und schon gar nicht für Spatial), und jeder, der auf Unterstützung im Core setzt, geht ein größeres Risiko in Bezug auf die Portierung von Bibliotheken ein ... es scheint, als würde man auf eine andere Version für diesen Übergang warten Es würde eine gewisse Stabilität und eine Chance für EF Core und andere Ports geben, aufzuholen, ganz zu schweigen von signal r im gesamten Framework.

Ich wette, dass die meisten Unternehmen asp.net core (was übrigens großartig ist) auf dem vollständigen Framework ausführen und sich in einer ähnlichen Position wie wir befinden könnten.

Bedeutet das angesichts dieser Umstellung auf den Schnellzug für ASP.NET Core, dass Sie eine LTS- und eine aktuelle Version einführen, und wie lange wird die Unterstützung für diese Instanzen dauern?

Ich glaube, ich bin in der glücklichen Situation, dass ich an einer Greenfield-Lösung arbeite, die keine Anforderungen hatte, um auf netfx zu laufen, _aber_ es war immer schön, wenn es möglich war. Das einzige, was für mich ein Blocker wäre, wären Windows-Dienste, auf die ich netfx abziele, aber dafür gibt es einen Plan.

Ich habe das Gefühl, dass diese Änderung in die falsche Richtung geht. Ich verstehe, dass einige Funktionen Kern-exklusiv sind, bis netstandard aufholt. Aber diese reine Kernroute zu gehen, ist ein rutschiger Abhang zur Schaffung eines zerbrochenen Ökosystems.

Diese Änderung macht eine Aussage, von der ich nicht sicher bin, ob sie mir gefällt: Es ist in Ordnung, nur auf netcoreapp abzuzielen.

Ich wollte auch meine Meinung schreiben.

Ich glaube, dass es noch zu früh ist, .net Framework fallen zu lassen. Ich weiß nicht, was das Problem der gemeinsamen Unterstützung von .net Framework und .net Core ist, aber ich glaube, dass diese Entscheidung die Migration zu AspNet Core etwas schwieriger machen wird. Weil einige Unternehmen denken: „Lasst uns AspNet Core mit .net Core starten. Aber jetzt wird das nicht mehr möglich sein und Unternehmen werden zögern, mit AspNet Core zu beginnen. Außerdem kann diese Entscheidung den Wert von .netstandard verringern.

@hikalkan

Weil einige Unternehmen denken: „Lasst uns AspNet Core mit .net Core starten.

Sie können aber immer ASP.NET Core 1.1 verwenden, richtig?

Außerdem kann diese Entscheidung den Wert von .netstandard verringern.

Ich verstehe nicht, warum das der Fall sein sollte. Wie ich bereits sagte, zielen unsere Cross-Cutting-Bibliotheken immer noch auf .NET Standard sowie APIs ab, die über alle .NET-Implementierungen hinweg funktionieren müssen.

Sicher, sie können asp.net Core 1.1 verwenden. Aber es ist nicht schön zu sagen: „Die neueste Version von ASP.NET Core ist 2.x, aber Sie sollten ASP.NET Core 1.x verwenden, wenn Sie auf das .net-Framework abzielen möchten“. Das ist nicht viel anders als zu sagen "MVC 5.x verwenden" :)

Ich glaube, dass .net Core die Zukunft ist (nicht Zukunft, sogar jetzt!), aber es ist früh, .net Framework fallen zu lassen (diese Entscheidung wird von der Community so verstanden werden, als wäre .net Framework veraltet).

Sie können aber immer ASP.NET Core 1.1 verwenden, richtig?

es gibt keinen eindeutigen Vorteil. Erstens ist es noch nicht ausgereift, also ist es eine Wette.
Zweitens wollen Entwickler in ASP.Net Core nicht in alte Tools schreiben und zurückbleiben.
Ich interessiere mich für einige Dinge.

  1. Wir arbeiten bereits im Greenfield-Projekt vollständig in ASP.Net Core, Dapper usw.
    Aber in anderen Projekten befindet sich unsere Geschäftslogik in 4.6-Assemblys. Wie ich oben gelesen habe, sollten wir kein Problem haben, auf sie zu verweisen. Ich hoffe, ich habe das ungefähr verstanden.
  2. SignalR . Verzeichnisdienste, MS Orleans, Azure.
  3. Vielleicht irrelevant für das obige Gespräch, aber ich möchte unbedingt einen ASP.Net Core mit Kestrel oder einem anderen HttpListener als UWP-Desktopanwendung oder als Desktopbrücke in UWP lokal hosten.

Ich muss sagen, ich bin ziemlich enttäuscht von der Kommunikation zu diesem Thema. Ich denke, wir können mit der Entscheidung leben, aber sie kam aus dem Nichts.

Im Juli beginnt mein Team mit der Arbeit an einem 12- bis 18-monatigen Greenfield-Projekt, das auf ASP.NET Core 2.0 ausgeführt wird, mit all den coolen Dingen, über die wir seit Jahren in .NET Core lesen.

In der Zwischenzeit haben wir jedoch eine ASP.NET MVC Core 1.0-App, die das Zentrum unseres Legacy-Produkts ist, das im Wesentlichen als Wrapper zum Aufrufen von .NET Framework-Bibliotheken dient.

Ich habe mit dem Team bestätigt, dass ihr Plan darin besteht, die App auf ASP.NET MVC Core 2.0 zu aktualisieren und sie Teil der neuen App werden zu lassen, wenn wir die .NET Framework-Komponenten austauschen. Jetzt bleiben wir bei ASP.NET MVC Core 1.0 hängen, das EOL-fähig sein wird, bevor wir das Projekt abschließen.

Kurz bevor ich meine Meinung vertrete, möchte ich nur Klarheit über einen Teil.
Gehe ich mit der Annahme richtig, dass, wenn wir ASP.NET Core weiterhin verwenden wollen,
Wir können nicht auf DLLs verweisen, die auf .Net 4.5 oder höher abzielen, und sie so funktionieren lassen, wie sie es derzeit tun.

@louislewis2 Nein, das ist nicht richtig. Sie können net45 - net461 Bibliotheken verwenden, solange sie sich innerhalb des unterstützten API-Bereichs für netstandard2.0 . Sie müssen diese Bibliotheken nicht neu kompilieren.

@bradwilson Danke für die Klarstellung. Das wird mich heute Nacht sicherlich besser schlafen lassen.
Viele der Bibliotheken stehen nicht unter unserer Kontrolle, das wäre also ein großes Problem gewesen.

Bin jetzt sehr erleichtert :)

@shanselman @DamianEdwards @davidfowl Für Ihre Liste der Elemente, die wir verwenden und die noch nicht portiert wurden, wären Elemente in der system.management dll. Wir verwenden speziell die Hardwarekennungen, die für die automatische Linkgenerierung für Azure Service Bus und unser gesamtes Lizenzserver- und Clientpaket verwendet werden. Ich stelle mir vor, dass sie uns einige ernsthafte Probleme bereiten würden, wenn sie derzeit nicht die API sind?

https://github.com/dotnet/corefx/issues/3324
https://github.com/dotnet/corefx/issues/14762

Dies ist unser größter Fehler, der uns dazu bringt, einige unserer Apps auf dem vollständigen Framework auszuführen.

Das bringt uns in eine unangenehme Situation.

Ich bin gerade dabei, unsere Microservices von ASP.Net 4.5, selbstgehostetem In-Process auf Kestrel (Legacy-Kompatibilitätsgründe), auf vollständig selbstgehostetes ASP.Net Core 1.x zu portieren. Allerdings müssen wir diese Dinge vorerst im vollen Rahmen ausführen. Und dafür gibt es gute Gründe.

Wir haben eine Reihe harter Windows-Abhängigkeiten, die bereits Teil unserer Infrastruktur sind und nicht geändert werden können. Dazu gehören NTLM-Authentifizierung, Ereignisprotokollprotokollierung usw. Wenn ASP.Net Core 2.x aus der Netstandard-Unterstützung aussteigt, kann ich es genauso gut überhaupt nicht tun. Das Problem ist, dass es keine aktiv entwickelte vollständige Framework-Alternative gibt. Katana ist tot und langsam (im Vergleich).

Wenn mir jemand einen HTTP-Server zeigen könnte, der so schnell ist wie Kestrel für .Net Framework, dann sicher. Aber das gibt es nicht. Ich muss also akzeptieren, dass ASP.Net mit dieser Änderung tatsächliche Produktionskunden wie mich hinter sich lässt.

Wenn der Stack alle neuen Extras wie Pipelines und Span benötigt, sollten diese als Netstandard-Bibliotheken bereitgestellt werden. Welche APIs verwendet ASP.Net Core 2.x in netcoreapp2.0, die nicht in netstandard2.0 enthalten sind, und warum können diese APIs in der Zwischenzeit nicht zu netstandard2.0-Erweiterungsbibliotheken gemacht werden?

Wollen wir damit ernsthaft sagen, dass MS zwei Jahre lang an einem (Netto-)Standard für alle seine Frameworks gearbeitet hat, nur um dann umzukehren und ein Flaggschiff-Produkt herauszubringen, das diesen Standard nicht verwendet?

Ich denke, dass das GitHub-Team aufgrund dieses Problems die Paginierungsfunktion für den Abschnitt "Probleme" hinzufügen wird.

@mattnischan

Ich bin gerade dabei, unsere Microservices von ASP.Net 4.5, selbstgehostetem In-Process auf Kestrel (Legacy-Kompatibilitätsgründe), auf vollständig selbstgehostetes ASP.Net Core 1.x zu portieren. Allerdings müssen wir diese Dinge vorerst im vollen Rahmen ausführen. Und dafür gibt es gute Gründe.

Sie können weiterhin ASP.NET Core 1.x verwenden, richtig?

Wenn der Stack alle neuen Extras wie Pipelines und Span benötigt, sollten diese als Netstandard-Bibliotheken bereitgestellt werden. Welche APIs verwendet ASP.Net Core 2.x in netcoreapp2.0, die nicht in netstandard2.0 enthalten sind, und warum können diese APIs in der Zwischenzeit nicht zu netstandard2.0-Erweiterungsbibliotheken gemacht werden?

Wenn APIs in .NET Standard erscheinen, die nicht in .NET Framework enthalten sind, wie werden Sie sie verwenden?

@stefan2410

Sie können dafür ASP.NET Core 1.x verwenden, oder? Welche ASP.NET Core 2.0-Funktionen benötigen Sie? Ist es nur SignalR?

Belassen Sie die App für die nächsten zwei Jahre unverändert, aber tauschen Sie die .NET Framework-Bibliotheken gegen ihre .NET Core-Äquivalente aus, wenn Sie fertig sind. Dadurch würde unsere Geschäftslogik usw. zwischen den beiden Apps geteilt bleiben.
Dies ist nicht möglich, da Juli 2018 die Frist für die Unterstützung von ASP.NET MVC Core 1.0 ist.

Wieder einmal verlängern wir in meiner hypothetischen Welt die Lebensdauer von 1.x

Aktualisieren Sie die App auf ASP.NET MVC Core 2.0 und lassen Sie sie Teil der neuen App werden, wenn wir die .NET Framework-Komponenten austauschen.
Wir können dies auch nicht tun, da Core 2.0 das .NET Framework nicht unterstützt, also geht es um alles oder nichts.

Brauchen Sie eigentlich ASP.NET Core 2.0? Oder nur .NET Core 2.0?

Wenn APIs in .NET Standard erscheinen, die nicht in .NET Framework enthalten sind, wie werden Sie sie verwenden?

Unser Plan war: warten, bis sie drin sind . Du hast vorhin gesagt, das ist nur eine Frage der Zeit, oder? Aus Stabilitätsgründen wäre es in Ordnung gewesen, die Blutungskante um einen festen Betrag zu verzögern. Zumindest viel besser, als dauerhaft ins Hintertreffen zu geraten.

@davidfowl
Ich werde in ASP.Net Core 2.0 einziehen. Ich habe keine andere Lösung. Ich kann dem Team nicht sagen, hinter der Evolution zu bleiben, wir haben lange auf den ASP.Net Core gewartet.
Soweit wir keine Probleme mit unseren Business Logic 4.6 Assemblies Referenzen haben.
Ich brauche SignalR, DirectoryServices, keine Probleme mit Azure/Amazon-Bibliotheken, MS Orleans.
Vielleicht ist es auch irrelevant für die obige Konversation, aber ich möchte, dass eine Desktop-App lokal einen ASP.Net Core mit Kestrel / HttpListener als UWP-Desktop-Anwendung oder als Desktop-Bridge in UWP hostet.
Wir können den Code nicht für XAML umschreiben und ich möchte Electron nicht verwenden.

Sie können weiterhin ASP.NET Core 1.x verwenden, richtig?

Für welchen Zeitraum? Ich kann etwas wie das Ereignisprotokoll nicht sehen, das es zum Netzstandard schafft.

Wenn APIs in .NET Standard erscheinen, die nicht in .NET Framework enthalten sind, wie werden Sie sie verwenden?

Ist das ein Ding? netstandard20 scheint laut Dokumentation immer noch auf net461 zu laufen. Wollen Sie damit sagen, dass die API unter netstandard20 nicht vollständig genug ist, um die neuen Goodies zu implementieren? Oder gibt es einen Plan, den Netstandard über das Framework hinaus zu verschieben, das noch nicht bekannt gegeben wurde?

Unser Plan war: warten, bis sie drin sind. Du hast vorhin gesagt, das ist nur eine Frage der Zeit, oder? Aus Stabilitätsgründen wäre es in Ordnung gewesen, die Blutungskante um einen festen Betrag zu verzögern. Zumindest viel besser, als dauerhaft ins Hintertreffen zu geraten.

Bibliotheken können zusätzlich zum Standard geschrieben werden. Wenn Dinge im Standard selbst geändert werden müssen, dauert es viel länger, bis er in allen Implementierungen von .NET übernommen wird, und dazu gehört auch .NET Framework. Es kann ein paar Dinge bedeuten:

  • .NET Standard wird sich mit der Geschwindigkeit der langsamsten Implementierung weiterentwickeln
  • .NET Standard wird sich in einem anderen Tempo weiterentwickeln und .NET Framework wird als letztes aufholen.

Das bedeutet natürlich nicht, dass Bibliotheken nicht dagegen geschrieben werden können, es bedeutet lediglich, dass diese Vorbehalte berücksichtigt werden müssen, wenn Sie die Version von .NET Standard auswählen, die Sie unterstützen möchten.

Vielleicht ist es auch irrelevant für die obige Konversation, aber ich möchte, dass eine Desktop-App lokal einen ASP.Net Core mit Kestrel / HttpListener als UWP-Desktop-Anwendung oder als Desktop-Bridge in UWP hostet.

ASP.NET Core auf UWP befindet sich derzeit in keiner Roadmap, daher kann ich nicht wirklich sagen, was hier passieren wird. HttpListener ist jedoch Teil von .NET Standard 2.0, also besteht vielleicht die Möglichkeit, dass es funktioniert.

Ich möchte mir einen Moment Zeit nehmen, um allen für ihre Kommentare und Rückmeldungen hier zu danken. Wir wissen es wirklich zu schätzen, ebenso wie Ihre Geduld, während wir den Weg nach vorne finden. Bitte beachten Sie, dass wir nicht beabsichtigten, dass diese Änderung so hart, so spät und ohne Vorwarnung erfolgt. Rückblick ist 20/20 und wenn wir gewusst hätten, was wir jetzt wussten, hätten wir die Dinge früher kommuniziert. Wir werden uns mehr bemühen, voranzukommen.

Basierend auf dem Feedback, das wir hier erhalten haben, haben wir einen Plan, den ich mit Ihnen teilen möchte, bevor wir ihn später in dieser Woche mit der Version 2.0.0-preview1 als Ankündigung veröffentlichen. Wenn das passiert, werden wir ein neues Thema eröffnen, um die Diskussion über diesen Plan zu erleichtern, aber jetzt mach weiter und teile deine Gedanken und dein Feedback hier weiter:

  • Die Unterstützung für ASP.NET Core 1.x auf .NET Framework wird um mindestens ein weiteres Jahr (bis Juli 2019) verlängert. Wir werden dies jährlich neu bewerten und uns dazu verpflichten, den Support für ASP.NET Core 1.x 12 Monate im Voraus zu beenden (also würden wir bis Juli 2018 bekannt geben, ob wir um weitere 12 Monate bis Juli 2020 verlängern) ( Randbemerkung: is Ist sonst noch jemand ausgeflippt, weil wir schon über 2020 reden? Nein? Ok, nur ich. )
  • Das neue SignalR wird auf ASP.NET Core 1.x abzielen und vollständig unterstützt werden (kommt später in diesem Jahr)
  • Wir werden ASP.NET Core 1.x weiterhin aktualisieren, um neue Sprachversionen usw. zu unterstützen, wie wir es für System.Web tun
  • ASP.NET Core 1.x auf .NET Core 1.x wird bis Juli 2018 unterstützt (keine Änderung)
  • ASP.NET Core 1.x, das auf .NET Core 2+ ausgeführt wird, wird unterstützt, solange ASP.NET Core 1.x auf .NET Framework unterstützt wird

    • Dadurch soll sichergestellt werden, dass es immer eine Überschneidung eines unterstützten ASP.NET Core auf einem unterstützten .NET Core gibt, während wir die Ausführung auf .NET Framework unterstützen, sodass Kunden im Laufe der Zeit portieren können, während sie auf unterstützten Bits bleiben

  • Die .NET Core 1.x-Unterstützung (als Runtime) ändert sich nicht. Endet im Juli 2018. Kunden, die ASP.NET Core 1.x ausführen, müssen zu diesem Zeitpunkt zu .NET Core 2.0 wechseln oder .NET Framework verwenden (oder zu ASP.NET Core 2.0 auf .NET Core 2.0 wechseln).
  • Wir werden dieses Jahr System.DirectoryServices und System.Drawing auf .NET Core portieren (vollständig unterstützt, plattformübergreifend, Vorschau für mindestens Windows im Sommer)
  • Die Liste der Dinge, die danach auf .NET Core portiert werden müssen, umfasst derzeit ServiceBase (zur Unterstützung von .NET Core-Windows-Diensten). Noch keine Zeitleiste außer der nächsten (die Zeitleisten werden offensichtlich konkreter, wenn wir die Liste abarbeiten). Wir werden auf dieser Liste basierend auf Kundenfeedback aufbauen.
  • Wir haben derzeit keine Pläne, System.ServiceModel (serverseitiges WCF) auf .NET Core zu portieren. Die WCF für .NET Core wird möglicherweise weiter verbessert und es können Funktionen basierend auf Feedback hinzugefügt werden, z. B. HTTP-Nachrichtenverschlüsselung.

@DamianEdwards @davidfowl Ein großer Teil des Problems besteht darin, dass es monatelange Planungs- und Entwicklungsanstrengungen erfordern kann, während enorme Opportunitätskosten geopfert werden, um sich für den Wechsel zu ASP.NET Core zu entscheiden, wo viele Organisationen normalerweise nicht in der Lage sind, von einem zu wechseln .NET 4.x, da es die einzige Plattform ist, von der sie sicher sein können, dass sie alle ihre Systemabhängigkeiten ausführen können.

Bis zu diesem Zeitpunkt hat MS .NET Core aggressiv als die Zukunft von ASP.NET vermarktet, wobei unklar ist, ob die Entwicklung von ASP.NET 4.x eingestellt wurde und ob alle zukünftigen Entwicklungsanstrengungen in ASP.NET Core investiert werden Es werden viele Migrationen durchgeführt, um ihre Systeme auf dem neuesten Stand zu halten. Viele Leute werden sich fühlen, als wären sie unter einen Bus geworfen worden, wenn sie am Ende all ihrer Bemühungen effektiv auf eine EOL-Plattform migriert sind. Dies wird sowohl Organisationen als auch den Entwicklern/Beratern schaden, die die größten Verfechter der Umstellung auf .NET Core waren. Sie brauchen jetzt vielleicht nichts von ASP.NET Core 2.0, aber sie wollen definitiv etwas Spielraum für ihre Systeme haben und in der Lage sein, für all ihre Bemühungen auf einige neue Funktionen zuzugreifen.

Ich verstehe auch nicht, warum vorhandener „Legacy“-Code als Belastung angesehen wird, wenn er meiner Meinung nach als einer der größten Vermögenswerte von .NET angesehen werden sollte, .NET Core wäre bei weitem nicht so attraktiv, wenn er nicht in der Lage wäre, vorhandene .NET-Bibliotheken auszuführen . Java ist aufgrund des massiven und stabilen Ökosystems von JVM immer noch so stark, was wichtiger ist als die inhärente Schwäche der Sprache selbst.

Ich glaube nicht, dass MS auch nur begonnen hat, die Gegenreaktion durch die Einstellung der .NET 4.x-Unterstützung zu spüren, die nicht allgemein bekannt sein wird, bis sie angekündigt wird. Ich würde erwarten, dass die meisten Entwickler hier, die die Entwicklung auf GitHub aktiv verfolgen, dann mehr daran interessiert sind, neue Funktionen zu sehen Sie sind interoperabel und stellen sicher, dass es einen reibungslosen Migrationspfad für vorhandene Codebasen gibt. Ich wäre sehr überrascht, aber wenn Sie von dieser Entscheidung nach der Bekanntgabe keine Wärme bekommen, dann könnte es die richtige sein, da vielleicht nicht so viele Menschen dadurch verletzt werden.

Wäre es zu viel Aufwand, sich auf eine stabile/kompatible Version von ASP.NET Core 2.0 zu konzentrieren und dann die reine .NET Core-Zukunft für nachfolgende Versionen anzukündigen? Es scheint nur so, als wäre es in dieser Situation fair, da es völlig unvorhergesehen war.

@DamianEdwards danke für das Update und einen klaren Plan. Ich stimme dem nicht zu, aber ich weiß es trotzdem zu schätzen, dass du es darlegst.

Hier klafft noch eine große fundamentale Lücke. Die Portierung auf 1.x ist fast ausschließlich eine laterale, für uns enthält sie nur wenige Funktionen. 2.x enthält einige lohnende Upgrades, und wir haben immer noch keine Garantie, dass wir diesen Schritt jemals machen werden. Es besteht eine große Chance, dass wir viel Zeit, Geld und Mühe in die Portierung auf 1.x investieren, nur um dort aufgrund vollständiger Framework-Abhängigkeiten festzusitzen. Ich werde dieses Spiel nicht mit unserer Firma eingehen. Möglicherweise haben wir am Ende weniger Unterstützung als jetzt für ASP.NET 4.x.

Wenn sich das nicht ändert, werden unsere Apps nicht zu ASP.NET Core wechseln, und alle unsere Bibliotheken werden weitaus schlechter dran sein, da es an Dogfooding mangelt.

Ich hoffe sehr, dass Sie diese Entscheidung noch einmal überdenken. Ich hoffe, dass wir Stack Overflow eines Tages dazu bringen können, die Tausende von persönlichen Stunden zu nutzen, die wir der Entwicklung der .NET Core-Plattform gewidmet haben.

@ Nick Craver

Es besteht eine große Chance, dass wir viel Zeit, Geld und Mühe in die Portierung auf 1.x investieren, nur um dort aufgrund vollständiger Framework-Abhängigkeiten festzusitzen.

In diesem Thread haben Sie System.DirectoryServices als eines der Kernelemente bezeichnet. Ich nehme an, Sie haben einige Abhängigkeiten, von denen Sie glauben, dass es lange dauern wird, bis sie portiert werden, oder solche, die niemals portiert werden. Wenn 2.0 .NET Framework unterstützt, würden sich diese Abhängigkeiten in einem Jahr verschieben?

2.x enthält einige lohnende Upgrades, und wir haben immer noch keine Garantie, dass wir diesen Schritt jemals machen werden.

Welche? Es wäre gut zu wissen, weil wir darüber diskutiert haben, einige wichtige Dinge zurück auf ASP.NET Core 1.1 zu portieren, um den Übergang zu erleichtern.

Wenn sich das nicht ändert, werden unsere Apps nicht zu ASP.NET Core wechseln, und alle unsere Bibliotheken werden weitaus schlechter dran sein, da es an Dogfooding mangelt.

Ich weiß nichts über stackoverflow.com, aber ist es möglich, Teile abzubrechen (ich möchte nicht "Mikrodienste" sagen), damit ASP.NET Core für einige Teile verwendet werden kann?

@Mythos

Dies wird sowohl Organisationen als auch den Entwicklern/Beratern schaden, die die größten Verfechter der Umstellung auf .NET Core waren

Meinten Sie ASP.NET Core? Oder .NET Core?

@davidfowl Ich meinte ASP.NET Core, aber es betrifft auch Entwickler, die eine schrittweise Migration von ASP.NET Core/.NET 4.x zuerst und später von .NET Core planen.

Apropos, mir ist aufgefallen, dass es in ASP.NET Core/.NET Core keine Bibliotheken für die Handhabung von SAML gibt. Ich muss SSO über einen Drittanbieter-IdP handhaben, aber ich weiß nicht, ob das möglich sein wird.

@davidfowl Ich meinte ASP.NET Core, aber es betrifft auch Entwickler, die eine schrittweise Migration von ASP.NET Core .NET 4.x zuerst und dann von .NET Core planen.

Ich verstehe nicht, warum das der Fall sein sollte.

Ich denke, dass dieser Plan für meine Organisation wahrscheinlich ausreichen würde, um zu vermeiden, die Plattform zu verlassen. Die Hauptsache ist, einen längeren Zeitraum mit Support (=Sicherheitspatches) zu haben, in dem verbleibende Netfx-Deps umgeschrieben oder anderweitig beseitigt werden können. Es ist jedoch alles immer noch etwas heikel und konzeptionell seltsam. Was passiert, wenn wir in drei Jahren eine Website bauen wollen, die Excel-Dokumente aufnehmen kann, oder einen Webserver in eine App einbetten wollen? Was passiert mit anderen Frameworks wie Orleans, die anstelle von netcoreapp auf dem Standard aufbauen?

Ich verstehe ernsthaft nicht, warum so viel Arbeit an netstandard2.0 geleistet wurde, wenn es für ASP.NET Core nie gut genug sein würde, um es tatsächlich zu verwenden.

Was passiert, wenn wir in drei Jahren eine Website bauen wollen, die Excel-Dokumente aufnehmen kann?

Schwer zu sagen. Ich kann nicht für die Teams sprechen, denen das gehört, aber vielleicht wird es auf .NET Core portiert und funktioniert plattformübergreifend.

oder einen Webserver in eine App einbetten?

HttpListener ist Teil des Netzstandards 2.0.

Was passiert mit anderen Frameworks wie Orleans, die anstelle von netcoreapp auf dem Standard aufbauen?

Es liegt an den Frameworks zu entscheiden, ob sie auf .NET Framework, UWP, .NET Core, Mono usw. laufen wollen. Es ist eine Wahl. Orleans wird nicht mit .NET Core ausgeliefert. ASP.NET Core tut es. Diese Produkte sind ein und dasselbe.

Was für uns (und unsere Kunden) eine schwierige Entscheidung sein wird, betrifft nicht die Bibliotheken, die ich heute habe, sondern die Bibliotheken, von denen ich nicht weiß, ob ich sie in 6 Monaten brauchen werde. Es gibt eine lange Reihe von Bibliotheken und Frameworks, die netstandard noch nicht unterstützen. Beispielsweise stellten wir einen Monat nach einem Projekt fest, dass wir einige Funktionen in NHibernate benötigten, die in EF6 nicht einmal annähernd vorhanden waren, geschweige denn in EF Core. Was wäre also meine Option - Ziel ASP.NET Core 1.x auf vollständigem .NET?

Sieht so aus, als hätte ich in meiner Zukunft einen ApiPort.

Was wäre also meine Option - Ziel ASP.NET Core 1.x auf vollständigem .NET?

Jawohl.

Schwer zu sagen. Ich kann nicht für die Teams sprechen, denen das gehört, aber vielleicht wird es auf .NET Core portiert und funktioniert plattformübergreifend.

Richtig, aber sicherlich liegt es im Zuständigkeitsbereich des asp.net-Teams zu entscheiden, ob es sich lohnt, Zugang zu diesem Ökosystem von vielleicht nicht portierten Bibliotheken zu gewähren.

Richtig, aber sicherlich liegt es im Zuständigkeitsbereich des asp.net-Teams zu entscheiden, ob es sich lohnt, Zugang zu diesem Ökosystem von vielleicht nicht portierten Bibliotheken zu gewähren.

.NET ist groß und alt, Sie können also nicht erwarten, dass das ASP.NET-Team mit dem Atem der Bibliotheken spricht, die im .NET-Ökosystem existieren. Es ist unrealistisch. Ich habe gerade erfahren, was CSOM (https://msdn.microsoft.com/en-us/library/office/jj163123.aspx) als Teil dieses Threads war, und ich bezweifle, dass es portiert wird, aber das kann ich nicht sagen sicher.

Die Erweiterung der Unterstützung für ASP.NET 1.1 auf .NET Framework hilft, dies ein wenig zu mildern, aber ich denke, es hilft auch, weil einige Abhängigkeiten isoliert werden müssen, um ordnungsgemäß zu ASP.NET Core auf .NET Core zu wechseln (was die beabsichtigte Zukunft ist).

Ich werde die Bibliotheken beiseite lassen, da dieser Punkt bereits ausführlich diskutiert wurde. In unserem Fall (amilia.com, E-Commerce SaaS) ist das Tooling von Drittanbietern bereits ein Showstopper, wir können ASP.NET Core derzeit nicht einmal auf dem vollständigen Framework ausführen. Ich gebe zu, dass dies nicht nach einem legitimen Grund klingt, aber es ist eine Einschränkung, mit der wir umgehen müssen.

Theoretisch könnten wir diese Tools (z. B. Profiler, Überwachung, Build-Server usw.) durch Alternativen ersetzen, die .NET Core unterstützen, aber das sind ein paar Monate Arbeit, die ich lieber für die Lösung dringenderer Probleme aufwenden würde. Wir werden die Migration schließlich zu ASP.NET Core/.NET Core durchführen, aber im Moment ist es ein ziemlich bewegliches Ziel.

Bis zu diesem Zeitpunkt wurde die Erwartung geweckt, dass ASP.NET Core in der Lage sein würde , auf dem Desktop-Framework weiterzulaufen und somit die Breite von usw. usw. zu berücksichtigen. Ich weiß nicht, welche Art von Teeblättern wir lesen sollten, um zu wissen dass das unrealistisch war :/

Um es klar zu sagen: Die Idee, dass ASP.NET Core möglicherweise nur auf .NET Core ausgeführt wird, ist an sich nicht verrückt, aber wir haben noch nie zuvor davon gehört. Alle öffentlichen Informationen waren, dass es auf .NET Framework gut lief, und es gab keinen Hinweis darauf, dass dies möglicherweise geändert werden müsste.

.NET ist groß und alt, Sie können auf keinen Fall erwarten, dass das ASP.NET-Team mit dem Atem der Bibliotheken spricht, die im .NET-Ökosystem existieren. Es ist unrealistisch

Ist das nicht ein guter Grund, .NET 4.x weiterhin zu unterstützen? Die Last der Kompatibilität/Interoperabilität kann auf die .NET 4.x-Plattform eingedämmt werden, die eine funktionierende Lösung sein kann, die .NET Core von der Notwendigkeit befreien könnte, mit älteren Bibliotheken zusammenzuarbeiten, und den Druck verringert, vorhandene beliebte .NET-Bibliotheken auf .NET Core zu portieren ( für MS und externe Autoren).

@Mythos

Ist das nicht ein guter Grund, .NET 4.x weiterhin zu unterstützen? Die Last der Kompatibilität/Interoperabilität kann auf die .NET 4.x-Plattform eingedämmt werden, die eine funktionierende Lösung sein kann, die .NET Core von der Notwendigkeit befreien könnte, mit älteren Bibliotheken zusammenzuarbeiten, und den Druck verringert, vorhandene beliebte .NET-Bibliotheken auf .NET Core zu portieren ( für MS und externe Autoren).

Aus diesem Grund wurde die Lebensdauer von ASP.NET Core auf 1.1 verlängert (wenn auch nicht dauerhaft). Wir werden sicherstellen, dass SignalR funktioniert, da dies als einer der Hauptgründe für die Verwendung von ASP.NET Core 2.0 angegeben wurde. Gleichzeitig ist es nicht das, wo ASP.NET Core langfristig sein möchte. Die Absicht war immer, als Teil einer einheitlichen .NET Core-Plattform zu liefern.

@gulbanana

Bis zu diesem Zeitpunkt wurde die Erwartung geweckt, dass ASP.NET Core in der Lage sein würde, auf dem Desktop-Framework weiterzulaufen und somit die Breite von usw. usw. zu berücksichtigen. Ich weiß nicht, welche Art von Teeblättern wir lesen sollten, um zu wissen dass das unrealistisch war :/

ASP.NET Core auf .NET Framework wurde leider nie als Notlösung kommuniziert, um die Portierung zu erleichtern (das haben wir sehr schlecht kommuniziert). Es war nie beabsichtigt, eine für immer unterstützte Plattform zu sein, was die logische Schlussfolgerung ist, wenn Sie davon ausgehen, dass einige Abhängigkeiten einfach nie portiert werden.

Aus diesem Grund wurde die Lebensdauer von ASP.NET Core auf 1.1 verlängert (wenn auch nicht dauerhaft).

Die Frage ist, ob das ausreicht oder nicht, die aktuelle Version wurde im Grunde EOL'ed, bevor überhaupt eine kompatible/stabile Version geliefert wurde.

Ich glaube nicht, dass der Wert bestehender Investitionen berücksichtigt wird, wer will schon den ganzen Aufwand betreiben, um auf eine EOL-Plattform zu migrieren? Entwickler werden auf unbestimmte Zeit an ihren vorhandenen Brownfield-Systemen arbeiten, ihnen wird im Grunde gesagt, dass ihre aktuellen ASP.NET v4.x-Kenntnisse veraltet sein werden, und sie können nicht auf das neue ASP.NET Core-Entwicklungsmodell migrieren, weil . NET 4.x-Support eingestellt wird und es unverantwortlich wäre, eine Migration auf eine Sackgassenplattform in Betracht zu ziehen oder zu empfehlen.

@davidfowl

ASP.NET Core auf .NET Framework wurde leider nie als Notlösung kommuniziert, um die Portierung zu erleichtern (das haben wir sehr schlecht kommuniziert). Es war nie beabsichtigt, eine für immer unterstützte Plattform zu sein, was die logische Schlussfolgerung ist, wenn Sie davon ausgehen, dass einige Abhängigkeiten einfach nie portiert werden.

Fehler passieren, das ist in Ordnung. Das Problem ist nun, dass viele Leute diese Annahme gemacht haben und deshalb nur ASP.NET Core wegen ihrer logischen, aber falschen Schlussfolgerung verwenden. Wir werden sehen, wie viele ich denke :/

Ich warte so lange auf asp.net core 2/ .net core 2, aber das Ergebnis ist so deprimierend.

@Mythos

Ich glaube nicht, dass der Wert bestehender Investitionen berücksichtigt wird, wer will schon den ganzen Aufwand betreiben, um auf eine EOL-Plattform zu migrieren?

Kann nicht dasselbe Argument dafür angeführt werden, dass ASP.NET Core 2.0 nächstes Jahr EOL für .NET Framework ist, wenn 3.0 herauskommt? Wenn Sie sagen, dass ein Jahr für ASP.NET Core 1.1 nicht ausreicht, warum würden Sie vorschlagen, dass ein Jahr für ASP.NET Core 2.0 in Ordnung ist?

Entwickler werden auf unbestimmte Zeit an ihren vorhandenen Brownfield-Systemen arbeiten, ihnen wird im Grunde gesagt, dass ihre aktuellen ASP.NET v4.x-Kenntnisse veraltet sein werden, und sie können nicht auf das neue ASP.NET Core-Entwicklungsmodell migrieren, weil . NET 4.x-Support eingestellt wird und es unverantwortlich wäre, eine Migration auf eine Sackgassenplattform in Betracht zu ziehen oder zu empfehlen.

Wem wurde gesagt, dass ASP.NET 4.x-Fähigkeiten veraltet sein werden? Wenn überhaupt, hoffen wir, dass sie es nicht sind. Insbesondere MVC wirbt mit einigen neuen Features für die Konzeptkompatibilität. ASP.NET Core sieht Katana sehr ähnlich (und das ist kein Versehen). Wenn Sie über Web Forms sprechen, was ist dann mit MVC?

Ich habe keine Beratungserfahrung, aber ich würde zustimmen, dass ich zustimmen würde, wenn die Abhängigkeiten nicht verfügbar sind. Entweder das, oder die Anwendung muss neu gestaltet werden, um dies zu berücksichtigen.

@xyting kannst du das klären?

@davidfowl

Kann nicht dasselbe Argument dafür angeführt werden, dass ASP.NET Core 2.0 nächstes Jahr EOL für .NET Framework ist, wenn 3.0 herauskommt? Wenn Sie sagen, dass ein Jahr für ASP.NET Core 1.1 nicht ausreicht, warum würden Sie vorschlagen, dass ein Jahr für ASP.NET Core 2.0 in Ordnung ist?

Ich war lange Zeit davon ausgegangen, dass ASP.NET Core 1.1 nur eine Notlösung für ASP.NET Core 2.0 und .NET Standard 2.0 war, die die kompatibilitätsorientierte und stabile LTS-Version sein würden, die die Lücke zu den meisten schließen würde die in .NET 4.x fehlende Kernfunktionalität - bis dieser Thread diese Annahme im Grunde zerstörte. Es ist nicht ideal, die .NET 4.x-Kompatibilität bis zu ASP.NET Core 2.0 aufrechtzuerhalten, aber es ist viel besser, als es mit der aktuellen Version zu beenden, was niemand erwartet hat.

Wem wurde gesagt, dass ASP.NET 4.x-Fähigkeiten veraltet sein werden? Wenn überhaupt, hoffen wir, dass sie es nicht sind.

MS macht all sein aggressives Marketing für .NET Core mit allen neuen Ankündigungen und Funktionen, die scheinbar auf ASP.NET Core ausgerichtet sind. Werden alte ASP.NET WebForms/MVC überhaupt offen entwickelt? Welcher Anteil des Entwicklungsaufwands wird in alte ASP.NET WebForms/MVC im Vergleich zu .NET Core investiert? Ich habe keine Ahnung, alles, was ich in letzter Zeit gesehen habe, alle wöchentlichen Standups, Video-Tutorials, scheint sich ausschließlich auf ASP.NET Core zu konzentrieren. Ich weiß, dass ich mich definitiv nicht wohl dabei fühlen würde, neue Greenfield-Projekte mit alter ASP.NET WebForms- oder MVC-Technologie zu starten.

Wenn Sie hoffen, dass dies nicht der Fall ist, sollte MS dies auf jeden Fall besser mit klaren Roadmaps kommunizieren. Angesichts der Volatilität von ASP.NET in den letzten Jahren (diese Ausgabe ist ein perfektes Beispiel) ist es unmöglich, die Zukunft ohne eine offizielle Verpflichtung und Ankündigung zu kennen.

Hat sonst noch jemand das Gefühl, dass es besser gewesen wäre, wenn Version 1 nie auf dem vollen Framework gelaufen wäre? Das hätte ich aufgrund der Namensgebung nicht erwartet. Jetzt, wo es funktioniert und ich einen Vorgeschmack hatte, bin ich enttäuscht, es zu verlieren.

Ich verstehe, woher Sie kommen, Sie möchten den gesamten Stapel so schnell wie möglich iterieren. Sie konkurrieren mit einer ganzen Reihe von Web-Frameworks auf der grünen Wiese, die den gesamten Stack kontrollieren und kein Gepäck mitschleppen müssen. Das Ablegen des Gepäcks von System.Web ist einer der Hauptgründe, warum ASP.NET Core so aufregend ist.

Nachdem ich darüber geschlafen habe, kann ich sagen, dass unsere Nutzung in Ordnung sein wird, die Abhängigkeiten, die wir brauchen, sollten alle auf 2.0 funktionieren.

Gleichzeitig ist es nicht das, wo ASP.NET Core langfristig sein möchte. Die Absicht war immer, als Teil einer einheitlichen .NET Core-Plattform zu liefern.

Man muss zwar kein Hellseher sein, um herauszufinden, dass .NET Core die Plattform der Zukunft von .NET ist … wenn die Absicht von Anfang an (oder wie Sie es ausdrücken „immer“) darin bestand, ASP.NET Core mit . NET Core, das wurde definitiv in keinem Medium kommuniziert, das ich je gesehen habe.

Ich habe buchstäblich jede einzelne Minute jedes einzelnen ASP.NET-Standups gesehen (einschließlich Hanselman und Glenn, die 3 Stunden lang Fehler bei Docker beheben ... weil ich kein Leben habe), ich lese die Blogs, ich bin immer auf Twitter, ich gehe zu Mehr als 2 Konferenzen pro Jahr, Teilnahme an Benutzergruppen usw., und ich habe noch nie gehört, dass dies als Absicht von ASP.NET Core kommuniziert wurde. Stattdessen habe ich immer und immer wieder gehört „es läuft auf beiden Plattformen“ und zu Recht haben die Leute das Gefühl, dass ihnen jemand den Stuhl unter den Füßen weggezogen hat. Ich habe sogar Vorträge über ASP.NET Core gehalten und selbst gesagt, „es läuft auf beiden Plattformen“, und jetzt fühle ich mich schuldig für jeden, den ich auf diesen Weg geführt habe. Ich würde sagen, dass die ITT-Leute wahrscheinlich auf dem neuesten Stand sind und diese Art von Nachrichten am meisten akzeptieren würden, und hier gibt es eine Menge Gegenreaktionen. Es scheint, als würde es nur noch schlimmer werden, da diese Nachricht zu den Entwicklern und ihren Managern durchsickert, die nicht so eingebunden und wahrscheinlich konservativer sind als diese ITT.

Abgesehen von der mangelnden Kommunikation und dem Mangel an Unterstützung für einige Szenarien, denke ich, dass ein Großteil der Gegenreaktion nur auf den Zeitpunkt dieser Ankündigung zurückzuführen ist. .NET Core 2 ist noch nicht einmal RTM-fähig und wird bereits als der einzige langfristige Weg nach vorne angesehen, und es wurde im Wesentlichen eine tickende Zeitbombe auf Full Framework für ASP.NET Core gesetzt. Ich denke, viele unserer Ängste könnten ausgeräumt werden, wenn wir neben Nachtwäsche etwas Greifbares haben, mit dem wir spielen können.

Ich denke wirklich, dass es ein besseres Tooling-Erlebnis geben muss als „Führen Sie es aus und sehen Sie, ob es funktioniert“, wenn Sie auf net461+-Bibliotheken von .NET Core 2+ in VS verweisen, da ich bereits diese Meldung sehen kann: „Wir können wahrscheinlich das meiste davon ausführen Ihre 461+ Versammlungen auch!" wird zu Tode vermarktet. Etwas, das fehlende APIs dessen, worauf wir verwiesen haben, analysieren könnte, Kompilierzeitfehler liefert und idealerweise sogar kompatible Nupkgs vorschlägt, falls vorhanden (wie System.Configuration im obigen EF6-Beispiel ... und es funktionieren lässt :smile:). Offensichtlich kann nicht alles zur Kompilierzeit analysiert werden (das oben erwähnte Szenario mit verteilten Transaktionen fällt mir als etwas ein, das im Voraus schwer zu analysieren ist), aber je mehr, desto besser. So etwas wie das, was Immo hier für PlatformNotSupportedException gemacht hat, und die fehlenden net461-APIs für netstandard2 wären nett.

Nur meine 2 Cent. Ich hoffe, ich übertreibe nur. Letztendlich sind viele von uns einfach enttäuscht, weil wir ASP.NET Core lieben und nicht wollen, dass uns irgendetwas daran hindert, es zu verwenden. ❤️

Wenn ich mich den bereits aufgeführten Bedenken anschließe, starten wir nächsten Monat ein neues ASP.NET MVC-Projekt und es wird ein einfaches .NET Framework mit ASP.NET MVC sein, weil der Kunde nicht darauf vertraut, dass Microsoft in dieser Hinsicht das Richtige tut Langzeitplanung.

Die Kundenorganisation verwendet immer noch Windows 7-Bereitstellungen, und dieses Projekt ist eine Ausnahme, da der Großteil ihrer Webprojekte tatsächlich auf UNIX mit Java durchgeführt wird, wobei .NET hauptsächlich für Desktop-Anwendungen verwendet wird.

Diese Art von Ungewissheit häuft sich nur zu der kaputten Geschichte, die Windows 8 .NET Stack und UWP waren, und erhöht das Interesse des CTO der Organisation, nach stabileren Alternativen zur Zukunft von .NET zu suchen.

Wenn Sie diese Art von Organisationen zwingen, Module von Grund auf neu zu schreiben, um auf ASP.NET Core zu arbeiten, kann ich unseren Kunden auch raten, etwas mit stabileren Roadmaps zu übernehmen, anstatt das Gesicht über Probleme zu verlieren, die ich nicht kontrollieren kann.

@davidfowl Es kann sein, dass diese Änderung für 99% der Projekte gut funktioniert. Aber es wurde verkauft als "es läuft auf beiden Plattformen" und "Sie können es mit vollem Framework verwenden, wenn Sie müssen". Jeder wusste, dass die vollständige Framework-Version von asp.net Core für die Projekte gedacht war, die nicht migriert werden konnten, und das war in Ordnung. Und die Leute planten mit diesem Hintergedanken.

Diese Änderung ist vielleicht nicht die schlechteste in Bezug auf den Code, aber sie wird höchstwahrscheinlich einen riesigen Shitstorm auslösen, wenn die regelmäßigeren Entwickler die Nachrichten sehen. Und es wird nicht um den Code gehen, sondern um das, was versprochen wurde. Und das Versprechen lautete: „Run net oder core und netstandard, um sie alle zu kombinieren“.

@DamianEdwards @davidfowl Danke, dass du den Plan geteilt hast.

SignalR auf 1.x ist eine große Erleichterung, unsere nicht unterstützte Version zu ersetzen, und auch die Nachricht, dass ServiceBase als nächstes auf der Liste steht, da wir das derzeit auch verwenden!

Wir sind jedoch stark auf EF6 und Spatial angewiesen, also bleiben wir bei 1.x hängen, bis das den Funktionsumfang hat, den wir brauchen ....

Als halb amüsante Randnotiz kann dies jedoch letztendlich eine weitere Bereitstellung von Microservices dafür erzwingen. Ich werde mich jedoch nicht darauf freuen zu erklären, warum unsere LOB-Kunden mehrere weitere APIs auf IIS installiert haben müssen, nur um unsere Produkte zum Laufen zu bringen ....

Ich wünschte wirklich, dies könnte zurückgehalten werden, da es einfach zu früh zu sein scheint und wie mehrere Leute erwähnt haben, wird dies eine erhebliche Gegenreaktion hervorrufen, wenn der Blog-Beitrag veröffentlicht wird.

Außerdem muss ich sagen, dass ich mich ein bisschen „solded-the-river“ fühle, wenn von Anfang an das Gefühl war, dass dies auf dem gesamten Framework laufen wird und Kollegen dasselbe gepredigt hat. Erklärt jedoch die verwirrende Namenswahl von asp.net core.

@shanselman @davidfowl Mein größter Schmerzpunkt ist NHibernate. Auch nach der Veröffentlichung von EF Core ist es immer noch der einzige fortschrittlichste O/R-Mapper mit vollem Funktionsumfang.

@shanselman @DamianEdwards Ich fange gerade an, darüber nachzudenken, eine Site von ASP.NET MVC 4 auf die neueste Version zu aktualisieren (ich bin verwirrt, ob es 5 oder eine ist). Ich muss immer noch das vollständige .net-Framework ausführen, da ich sowohl auf SyncFusion- als auch auf Telerik-Bibliotheken verweise. SyncFusion zum Anzeigen von PDF-Dateien und Telerik zum Generieren von Word-DOCX-Dateien. Wie andere darauf hingewiesen haben, ist es einfach nicht vernünftig, dass Microsofts Strategie für den Umgang damit lautet: "Probieren Sie es aus und sehen Sie, ob es funktioniert". Ich kann das nicht garantieren, und die Produktion wird alles funktionieren, weil es eine so große Codebasis von Code von Drittanbietern ist.

Während die SyncFusion-Unterstützung im Allgemeinen sehr gut ist, ist die Unterstützung von Telerik nicht so, und ich wäre überrascht, wenn sie es mit .net Core zum Laufen bringen könnten. Ich habe keine Ahnung, welche APIs sie möglicherweise verwenden, die in .net Core nicht unterstützt werden - und als Endbenutzer ist das der springende Punkt bei dem Produkt eines Drittanbieters. Ich schließe es einfach an und es tut, was es tun muss.

Ehrlich gesagt, für einen Kunden, der nicht sehr häufig mit dem Zeug handelt (ich mache meistens WPF), ist das alles außerordentlich verwirrend. Es gibt zu viele verschiedene Versionen mit verschiedenen Inkompatibilitäten. Wie jemand darauf hingewiesen hat, ist es ein bisschen wie UWP XAML - ähnlich, aber völlig inkompatibel mit WPF XAML.

Nicht gut für Entwickler und nur eine weitere Sache, die dazu führt, dass Entwickler das Vertrauen in Microsoft verlieren (eine von vielen in den letzten Jahren). Es scheint mir, dass ASP.NET definitiv auf dem vollständigen .net-Framework laufen sollte, weil es eine so große Bibliothek von Tools gibt, die Benutzer möglicherweise auf ihrem Server verwenden müssen. In meinem Fall kann ich bei Bedarf problemlos auf eine neuere Version des .net-Frameworks aktualisieren, um die neuesten ASP.net-Inhalte zu verwenden, wenn ein Update für die neue ASP.net-Funktionalität erforderlich war.

Was auch immer an die Entwickler gesendet wird, muss viel klarer sein, bevor die Leute einfach komplett abspringen.

...Stefan

ASP.NET Core auf .NET Framework wurde leider nie als Notlösung kommuniziert, um die Portierung zu erleichtern (das haben wir sehr schlecht kommuniziert). Es war nie beabsichtigt, eine für immer unterstützte Plattform zu sein, was die logische Schlussfolgerung ist, wenn Sie davon ausgehen, dass einige Abhängigkeiten einfach nie portiert werden.

Ich persönlich habe kein Problem mit den in dieser Ausgabe aufgeführten Änderungen, ich verstehe die Begründung und sie machen Sinn, jetzt, wo ich viele Antworten hier durchgelesen habe. Was Sie gerade gesagt haben, hebt jedoch hervor, was letztendlich der Kern des Problems ist - schlechte Kommunikation von Microsoft als Ganzes (was ich zu schätzen weiß, ist nicht Ihre Schuld oder die Schuld einer _spezifischen_ Einzelperson).

Vielleicht übersehe ich etwas, aber „im Freien entwickeln“ bedeutet mehr, als nur den Code auf Github zu haben, den jeder durchstöbern und damit spielen kann. Genau dieses Problem wurde erstellt, weil eines Tages eine Änderung im Code auftauchte, die die Leute überraschte, aber offensichtlich wussten Sie und alle im .net-Team davon und verstanden es – also ließ es lange auf sich warten. Das Problem ist, dass der Rest von uns Normalsterblichen davon völlig blind war.

Schlimmer noch, ich vermute, dass die Mehrheit der Entwickler github nicht allzu viel Aufmerksamkeit schenken, um ihr Wissen und ihre Informationen zu erhalten - also wird diese Änderung viel mehr Leute überraschen, als sie hier bereits kommentieren. Ich habe dieses Problem nur selbst entdeckt, weil es in meinem RSS-Feed von hackernews auftauchte – was nicht das ist, was ich als meine Top-Quelle für Nachrichten und Informationen bezeichnen würde.

Jeder, der die Blogbeiträge auf MSDN verfolgt, wird wissen, dass 2.0 kommt, und sie werden es als den heiligen Gral sehen, der die Lücke zwischen dem asp.net-Kern und allem, was ihm vorher „fehlte“, überbrückt, aber sie sind sich dessen überhaupt nicht bewusst was im Wesentlichen eine bahnbrechende Änderung für bestimmte Workflows ist. Es gab nur sehr wenige Details darüber, was wirklich mit dem Design von asp.net Core 2.0 passiert. Ich vermute, weitere Details werden später in dieser Woche bei Build kommen? Man kann nur hoffen.

Der .net-Slack ist eine weitere Informationsquelle, aber es ist ein bisschen laut, auf dem Laufenden zu bleiben, was wirklich vor sich geht. Es ist großartig, um Entwickler einzubeziehen und Fragen zu stellen, aber es ist kaum eine Nachrichtenquelle.

Twitter und soziale Medien sind weitere Informationsquellen, aber ähnlich wie diese Github-Ausgabe, wenn sie dort erscheint, liegt es normalerweise daran, dass jemand Bedenken hinsichtlich einer bereits getroffenen Entscheidung geäußert und die Leute überrascht hat.

Genau dieses Problem haben wir auch nicht zum ersten Mal. Erinnern Sie sich an das Fiasko, das durch den Wechsel zurück zu csproj verursacht wurde? Ich möchte nicht in die Debatten über diese Änderung einsteigen, aber es ist ein weiteres Beispiel für eine Änderung, die zur Überraschung der Leute geschah, die so schlecht kommuniziert wurde, dass bis heute viele Leute einfach nicht erkennen, dass es nicht dasselbe csproj ist aus der "schlechten alten Zeit".

Ich bin mir nicht ganz sicher, was ich hier vorzuschlagen versuche, aber bei der offenen Entwicklung von .net „fehlt“ definitiv etwas. Microsoft leistet großartige Arbeit bei der Bereitstellung von Ressourcen und Dokumentation für Entwickler, aber nur für fertige Produkte und ausgelieferte Dinge. Die Roadmap, die Planungsmeetings, alles, was über das Design und die Richtung der Frameworks entscheidet, scheint hinter verschlossenen Türen gemacht zu werden, mit der gelegentlichen Erwähnung von „ausgewählten Partnern“ und dergleichen. Ich sage nicht, dass jedes Meeting weltweit gestreamt und ausgestrahlt werden sollte, aber es könnte definitiv einen besseren Mittelweg geben, bei dem getroffene Entscheidungen und die Gründe dafür der Community so früh wie möglich auf einfache Weise mitgeteilt werden für diejenigen von uns, die wirklich mitmachen _wollen_, um zu verdauen und auf dem Laufenden zu bleiben. Vielleicht ein spezieller Blog auf MSDN (oder anderswo), der regelmäßig aktualisiert wird, wenn diese Entscheidungen getroffen werden.

Eines meiner größten Probleme dabei ist, dass Sie auf fast jeder Konferenz im letzten Jahr, auf der ASP.NET Core vorgestellt wurde, eine Folie präsentiert haben, die zeigt, dass asp.net Core sowohl auf .net Framework als auch auf .net Core ausgeführt wird Schauen Sie sich das an: Erkunden Sie die Webentwicklung mit Microsoft ASP.NET Core 1.0 von Ignite im letzten Jahr. Um etwa 7.50 Uhr sehen Sie die Folie.

Die größten Showstopper für mich sind System.DirectoryServices, ServiceBase, EF6 (EF Core ist nicht bereit), ClosedXML (zum Erstellen von Excel-Tabellen).

Die Unterstützung für ASP.NET Core 1.x auf .NET Framework wird um mindestens ein weiteres Jahr (bis Juli 2019) verlängert. Wir werden dies jährlich neu bewerten und uns dazu verpflichten, den Support für ASP.NET Core 1.x 12 Monate im Voraus zu beenden (also würden wir bis Juli 2018 bekannt geben, ob wir um weitere 12 Monate bis Juli 2020 verlängern) (Randbemerkung: is Ist sonst noch jemand ausgeflippt, weil wir schon über 2020 reden? Nein? Ok, nur ich.)

@DamianEdwards Vielen Dank für die Ankündigung.

Derzeit entwickelt unser Unternehmen Unternehmensanwendungen für mehrere Kunden mit ASP.NET Core 1.1 auf .NET Framework 4.6.2. Zu hören, dass die Unterstützung für diese Framework-Kombination mindestens bis 2019 und möglicherweise bis 2020 verlängert wird, ist eine große Erleichterung.

Wir werden dieses Jahr System.DirectoryServices und System.Drawing auf .NET Core portieren (vollständig unterstützt, plattformübergreifend, Vorschau für mindestens Windows im Sommer)

Dies sind die beiden einzigen Gründe , warum wir derzeit auf .NET Framework abzielen. Wenn diese vollständig auf .NET Core 2 portiert sind, bin ich sicher, dass wir unsere Anwendungen nächstes Jahr sicher auf ASP.NET Core 2 portieren können.

Scheint, als hätten viele Leute die Kardinalregel, ein MS-Entwickler zu sein, gebrochen – verpflichten Sie sich nicht zu einem Produkt/Fork bis mindestens V2.

Aber ja, sprechen Sie darüber, Ihre Unternehmenskunden zu entfremden! Der einzige Grund, warum sie MS verwenden, ist die Abwärtskompatibilität.

Die Mehrheit der Leute, die ASP.NET ausführen, KÜMMERT SICH NICHT, wenn es unter Linux läuft. Und wenn sie einen Blogbeitrag mit einem Geschwindigkeitsvergleich mit ASPNET Core sehen würden, würden sie beide nicht einmal plattformübergreifend lesen, wenn sie sehen würden, dass er Legacy .NET nicht unterstützt.

lolkatzen.

Ich denke, es ist sinnvoll, ASP.NET Core 2.0 vollständig auf net46x auszuführen, um vielen Leuten einen reibungslosen Migrationspfad in die neue Welt zu ermöglichen. Ich denke, viele Leute haben auf ASP.NET Core 2.0 und .NET Core 2.0 gewartet in der Hoffnung, dass es viele der heutigen Lücken schließen und eine Migration ermöglichen wird. Wenn ASP.NET Core 2.0 erfordert, dass alles auf netcoreapp2.0 portiert wird, dann wird dies eine massive Verlangsamung für Teams sein und vielleicht sogar die Machbarkeit gefährden.

Das bedeutet jedoch nicht, dass es nicht kurz darauf einen ASP.NET Core 3.0 geben kann, der nur auf netcoreapp2.0 für all die Leute abzielt, die an all dem neuen glänzenden Greenfield-Zeug arbeiten und auf der Überholspur sein wollen.

Zwei Versionen von ASP.NET Core (2.0 und 3.0) nebeneinander zu haben, könnte wirklich eine gute Sache sein (zumindest für eine Weile). Dadurch könnte MSFT den aktuellen MVC 5-Stack schneller auslaufen lassen, da die neue Version von MVC im Wesentlichen ASP.NET Core MVC 2.0 wäre, das auch auf vollständigem .NET laufen würde.

Ich denke, es ist sinnvoll, ASP.NET Core 2.0 vollständig auf net46x auszuführen, um vielen Leuten einen reibungslosen Migrationspfad in die neue Welt zu ermöglichen

Was würde es reibungsloser machen als die Portierung von ASP.NET Core 1.x?

Ich denke, viele Leute haben auf ASP.NET Core 2.0 und .NET Core 2.0 gewartet in der Hoffnung, dass es viele der heutigen Lücken schließen und eine Migration ermöglichen wird.

Der Großteil der Arbeit zur Kompatibilität wurde in .NET Core 2.0 und .NET Standard 2.0 geleistet. ASP.NET Core 2.0 hat ehrlich gesagt nicht so viele neue Funktionen. Uns wird gesagt, dass wir SignalR auf ASP.NET Core 1.x zurückportieren werden (was sowieso Post 2.0 ist). Ist es nur eine Wahrnehmungssache?

Zwei Versionen von ASP.NET Core (2.0 und 3.0) nebeneinander zu haben, könnte wirklich eine gute Sache sein.

Das machen wir mit 1.1 und 2.0 (einfach die Zahlen umdrehen).

Dadurch könnte MSFT den aktuellen MVC 5-Stack schneller auslaufen lassen, da die neue Version von MVC im Wesentlichen ASP.NET Core MVC 2.0 wäre, das auch auf vollständigem .NET laufen würde.

MVC 5 wird nie verschwinden, wir verwerfen nichts. Es wird unterstützt, solange .NET Framework existiert. Sie können immer noch keine ASP.NET Core-Projekte innerhalb der integrierten IIS-Pipeline (auf System.Web) ausführen, und es macht nicht alle die gleichen Dinge wie MVC 5 auf System.Web, also ist es wirklich kein Ersatz für bestimmte Szenarien .

@davidfowl Werde ich in der Lage sein, eine ASP.NET Core 1.x-App zu erstellen, die vollständig auf .NET und netcoreapp2.0 abzielt, sodass ich eine aktuelle Legacy-App zuerst auf ASP.NET Core migrieren kann, wobei alle Abhängigkeiten net46x sind, und langsam migrieren eine Abhängigkeit nach der anderen, um auf netstandard2.0 abzuzielen, bis alles auf netstandard2.0 ist, was es mir dann ermöglichen würde, die ASP.NET Core 1.x-App auf 2.x zu aktualisieren (und das Ziel für net46x als Teil davon zu löschen)?

Wenn ja, dann glaube ich, dass ich den Thread falsch verstanden habe. Ich denke, das ist wirklich das, wonach die meisten Leute hier suchen.

@dustinmoris ja das kannst du machen. Die Hauptsorge der Leute ist, was passiert, wenn sie nicht zu ASP.NET Core 2.x migriert werden, bevor der Support für ASP.NET Core 1.x endet, wenn es ihnen überhaupt möglich ist, zu migrieren.

@alexwiese ah ok na das ist ja super, was diskutieren wir denn jetzt hier eigentlich? Anstatt zu diskutieren, auf welches Framework wir abzielen, sollten wir den Supportzeitraum von ASP.NET Core 1.x diskutieren, was MSFT leicht ändern könnte, wenn sie es wollten :)

BEARBEITEN:
@DamianEdwards schrieb dies etwas weiter oben im Thread:

Die Unterstützung für ASP.NET Core 1.x auf .NET Framework wird um mindestens ein weiteres Jahr (bis Juli 2019) verlängert. Wir werden dies jährlich neu bewerten und uns dazu verpflichten, den Support für ASP.NET Core 1.x 12 Monate im Voraus zu beenden (also würden wir bis Juli 2018 bekannt geben, ob wir um weitere 12 Monate bis Juli 2020 verlängern) (Randbemerkung: is Ist sonst noch jemand ausgeflippt, weil wir schon über 2020 reden? Nein? Ok, nur ich.)

Klingt gut für mich. Verpflichten Sie sich zu einem weiteren Jahr Support und führen Sie dann regelmäßige Neubewertungen durch. Macht für mich total Sinn.

Ich habe jeden Beitrag in diesem Thread gelesen. Eine Frage ist noch offen: Warum wird diese Entscheidung getroffen? Ich kann nur zu dem Schluss kommen, dass es aufgrund eines technischen Problems erforderlich war. Wenn „Verwirrung“ bei der Benennung das Problem ist, sollte Microsoft einen besseren PR-Mitarbeiter einstellen und aufhören, die Scheiße zu rühren, wie es das Team in diesem Thread tut.

Was ist also das technische Problem, das ASP.NET Core 2.0 auf netstandard2.0 blockiert hat? Nichts ist unmöglich im Softwareland, also kann es nicht sein, dass Sie keine Lösung finden konnten, die auf .NET full nicht machbar ist (und daher nicht in netstandard20 aufgenommen werden kann). Ja, das kostet Zeit und Mühe, aber ich habe das Gefühl, dass Sie alle die Nebenwirkungen dieser Entscheidung für Ihre Benutzer nicht wirklich erkannt haben, wie viel Zeit / Mühe sie dafür investieren müssen.

Diese Entscheidung hat einen weiteren Nachteil: ASP.NET Core ist kein Konsument von netstandard und daher auch kein Treiber davon. Es macht den Netzstandard zu einem Nachfolger, und da der ASP.NET-Core nicht davon abhängt, zu einem Nachfolger mit geringer Bedeutung: Die API von .net Core 2.0+ ist die Zieloberfläche, da der ASP.NET-Core auf diese Oberfläche abzielt, nicht Netzstandard2.0.

Und, sorry @davidfowl , ich weiß, dass Sie es gut meinen, aber Menschen immer wieder ASP.NET Core 1.x vorzuschlagen, zeigt, dass Sie wirklich keine Ahnung haben, wie die Situation für die Menschen ist, denen Sie das vorschlagen: die Menschen können nicht migrieren auf ASP.NET Core 1.x, weil sie nicht wissen, ob es ohne feste Frist einen reibungslosen Weg davon gibt: Es könnte sein, dass sie länger auf dieser Plattform bleiben müssen, als sie derzeit denken (Abhängigkeiten mussten portiert werden etc.). Das allein macht die Entscheidung, zu ASP.NET Core 1.x zu wechseln, zu einer Entscheidung, die auf nichts anderem als einem „Versprechen“ von Microsoft basiert. Es ist eine API, die für internetorientierten Code gedacht ist. Sie müssen wissen, ob sie eine heute erstellte App auch innerhalb von 3 Jahren ausführen können, da Microsoft Sicherheitslücken darin beheben wird (um ein Beispiel zu nennen).

Ehrlich gesagt verspüre ich nicht den Drang, einen weiteren Chaos-Cluster innerhalb des .NET-Ökosystems zu starten: Wir brauchen Stabilität, Verlässlichkeit, Verlässlichkeit: "Mein heute geschriebener Code wird in 5 Jahren so laufen, wie er ist". Ja, ich weiß, das klingt für manche Leute albern, aber das ist die Realität: Es gibt bereits mehr Softwarepakete auf diesem Planeten als Entwickler, die sie warten, und die Kluft wird immer größer. Sie können nicht einfach davon ausgehen, dass sich eine Organisation für die Verwendung von ASP.NET Core als Webstack entscheidet und hoffen, dass der damit geschriebene Code innerhalb von 5 Jahren ausgeführt wird. Organisationen tun dies nicht mehr: Sie wissen, dass es Stacks gibt, die es gibt zuverlässig und geben Sie ihnen das: Sie wissen, dass sie möglicherweise nicht in der Lage sind, die gesamte App innerhalb dieses Zeitrahmens neu zu schreiben, also brauchen sie diese Gewissheit.

Microsoft hat mit diesem Thread und, Entschuldigung, ihrer schrecklichen PR zu diesem Thema gezeigt, dass sie diese Zusicherung nicht geben können. Und ganz gleich, wie sehr Sie versuchen, dem in den kommenden Tagen bei \build einen Schub zu geben, wir auf der anderen Seite des Zauns haben gelernt, dass die Dinge mit Microsoft Marketing != Assurance morgen funktionieren werden.

@FransBouma Ich glaube nicht, dass es ein technisches Problem gab, es hört sich so an, als ob die Motivation, nur auf netcoreapp2.0 abzuzielen, darin besteht, dass dies die einzige Strecke ist, auf der sich MSFT so schnell bewegen kann, wie sie möchten, was für uns danach gut ist alles, weil es bedeutet, dass ASP.NET Core 2.x sich viel schneller bewegen kann als alle anderen Webstacks in der .NET-Welt zuvor. Wenn Sie sich nicht auf diesen Schnellzug festlegen können, können Sie länger auf ASP.NET Core 1.x bleiben (wird derzeit bis 2019 unterstützt).

@FransBouma , wie @davidfowl und @shanselman erwähnt haben, dass in .NET Core schnell neue APIs hinzugefügt werden, und ASP.NET Core 2.x wird einige davon verwenden, daher der Wunsch, netcoreapp20 ins Visier zu nehmen. Wenn sie diese APIs zu netstandard2x hinzufügen würden, müssten .NET Framework und andere Plattformen aufholen, und sie bewegen sich notorisch langsam.

Ich werde meine Stimme auf der Seite „Das ist eine gute Sache“ der Debatte hinzufügen. Hier ist der Grund:

  • Das Team macht das nicht nur zum Spaß. Es gibt eine ganze Reihe neuer Features und Optimierungen, die bereit (oder fast bereit) sind, in .NET Core eingeführt zu werden, die unglaublich nützlich für Leute sind, die moderne Webanwendungen, APIs und Microservices erstellen und darauf warten, dass diese Features im vollständigen Windows .NET Framework landen würde die Veröffentlichung um viele Monate verzögern.
  • Viele der Beschwerden, die ich in diesem Thread sehe, sind Variationen von „Ich kann X in .NET Core 2.0 nicht ausführen“, wenn der Autor eigentlich meint: „Ich muss die Art und Weise ändern, wie ich X in .NET Core 2.0 mache.“ _. Ja, du musst dich ändern. Nein, das ist nichts Schlimmes. Wenn Sie eine kleine diskrete Funktionalität in Ihrer ASP.NET MVC-Anwendung haben, die etwas mit PDFs oder DOCX-Dateien macht, und Sie _wirklich_ keinen besseren Weg finden können, was auch immer das ist (haben Sie es versucht?), dann brechen Sie das Funktionalität in einen Microservice aus, der auf vollständigem .NET auf Windows Server ausgeführt wird, und rufen Sie ihn als HTTP-API von Ihrer .NET Core-Anwendung auf. Das Zerlegen von Anwendungen und das Verschieben bestimmter Funktionen in kleine, eigenständige Dienste ist nicht einmal eine Problemumgehung, _es ist eine bewährte Methode für allgemeine Zwecke_.

    • NB: Soweit ich das beurteilen kann, unterstützen die OpenXML-Pakete jetzt .NET Standard, sodass das Arbeiten mit Word/Excel/was auch immer nicht unmöglich sein sollte.

  • .NET Core 2.0 befindet sich noch nicht einmal in der richtigen öffentlichen Vorschau, daher scheint es verfrüht zu sein, sich darüber zu beschweren, dass es keine Unterstützung für LDAP oder was auch immer hat. Wenn RTM in Q3 kommt und es immer noch keine Möglichkeit gibt, mit AD oder Kerberos oder was auch immer zu interagieren, dann beschweren Sie sich (obwohl Sie auch über die Migration zu modernen Token-basierten Authentifizierungssystemen nachdenken, weil wir nicht mehr 2008 sind).
  • Es _gibt_ eine reibungslose Migration von ASP.NET MVC 4.5 zu ASP.NET Core 2.0. Es heißt ASP.NET Core 1.0 (und ich stimme zu, dass es unter den gegebenen Umständen ein gewisses Versprechen auf langfristige Unterstützung für 1.0 geben sollte). Sie können Apps mit 1.0 erstellen und sie auf Full .NET in einer integrierten Pipeline unter IIS 8.5 auf Windows Server 2012 R2 bis ausführen

    • Full .NET holt auf und Sie können ASP.NET Core 2.x darauf ausführen, oder

    • Unabhängig davon, auf welche Technologie von Drittanbietern Sie sich verlassen, unterstützt sie .NET Core (oder kann durch eine gleichwertige Technologie ersetzt werden, die .NET Core unterstützt).

  • Denken Sie daran, dass – während Ihr Team möglicherweise durch externe Abhängigkeiten oder interne Unternehmensrichtlinien oder -politik oder einfach nur Trägheit behindert wird – es Hunderttausende, wenn nicht Millionen von Entwicklern auf der Welt gibt, die versuchen, Anwendungen, Dienste und APIs mit modernen zu erstellen Architekturmuster und neue Technologieplattformen (Cloud/Edge/IoT/etc), für die ASP.NET Core 2.0 hervorragend geeignet ist. Sie wollen, dass es schnell, skalierbar und plattformübergreifend ist; Diese Dinge sind vielen Menschen wichtig. Von Microsoft zu verlangen, diesen schnell wachsenden Markt zu ignorieren, nur weil Ihr Drittanbieter von Steuerungen oder ein Open-Source-Projekt seinen Code noch nicht portiert hat, ist dumm.

@dustinmoris , das darauf hindeutet, dass netstandard die APIs fehlen, um einen schnellen Webstack zu erstellen. Wenn ja, haben wir alle größere Probleme.

@alexwiese wie gesagt, ich habe den kompletten Thread gelesen und somit auch die Beiträge auf die du dich beziehst. Ich weiß, was sie sagen und kann ihren Standpunkt verstehen, aber die getroffene Entscheidung zeigt, dass sie keine Ahnung haben, was ihre Benutzer mit ihren Sachen machen. Ich baue selbst seit vielen Jahren ein Produkt und weiß, dass man nach einer Weile an einem Punkt ankommt, an dem man Dinge herausschneiden und schneller vorankommen möchte, ohne den alten Kram, der veraltet ist. Aber das hat Konsequenzen, und eine Sache, die ich in den letzten 14 Jahren gelernt habe, ist, dass Abwärtskompatibilität eines der größten Merkmale ist, die ein Softwareprodukt haben kann: Es zu verwenden und „es funktioniert einfach“ ist ein entscheidender Punkt dafür viele viele Menschen sich für Ihre Plattform entscheiden. Sie denken vielleicht, dass es nicht so wichtig ist, und das ist in Ordnung, aber es gibt viele, viele Menschen da draußen, die das nicht so sehen können, da ihre Realität anders ist.

Es ist nicht so, dass das asp.net-Kernteam nicht schnell handeln sollte, es ist so, dass sie es auf eine Weise tun, die mit den Annahmen vieler Leute bricht, als sie zu asp.net Core 1.x wechselten.

@FransBouma Warum denkst du, hast du eine bessere Vorstellung davon, was die Benutzer von Microsoft mit den Sachen von Microsoft tun, als Microsoft?

@markrendle

Das Team macht das nicht nur zum Spaß. Es gibt eine ganze Reihe neuer Features und Optimierungen, die bereit (oder fast bereit) sind, in .NET Core eingeführt zu werden, die unglaublich nützlich für Leute sind, die moderne Webanwendungen, APIs und Microservices erstellen und darauf warten, dass diese Features im vollständigen Windows .NET Framework landen würde die Veröffentlichung um viele Monate verzögern.

Sagen Sie mir also, warum erstellen Sie diese Super-Duper-APIs nicht als .net-Standard-2.0-Pakete und veröffentlichen sie auf nuget?

Warum denken Sie, dass Sie eine bessere Vorstellung davon haben, was die Benutzer von Microsoft mit den Sachen von Microsoft machen, als Microsoft?

Oh, ich weiß nicht, nachdem ich die Beiträge in diesem Thread gelesen habe?

@FransBouma

Das deutet darauf hin, dass Netstandard die APIs fehlen, um einen schnellen Webstack zu erstellen. Wenn ja, haben wir alle größere Probleme.

Ich denke nicht, dass netstandard etwas fehlt, denn netstandard ist nichts anderes als eine Liste von Funktionen, die von einer Plattform implementiert werden müssen, die diesen Standard unterstützen möchte. Theoretisch können wir Netstandard so schnell verschieben, wie wir wollen, einfach mehr zur Spezifikation hinzufügen, aber realistischerweise ist es nicht für alle Plattformen möglich, diese neuen Spezifikationen einzuholen.

Die Frage ist also, will sich ASP.NET Core 2.x auf netstandard2.0 (der derzeit höchste) festlegen und dann wissen, dass es bei allem bleibt, was dort definiert wurde, oder nur ASP.NET Core 2.x verpflichten Sie sich zu netcoreapp2.x, das viel mehr sein kann als nur netstandard2.0. Ich bin mir sicher, dass es nach einer Weile wieder einen neueren Netzstandard geben wird (3.x?), der die neuen glänzenden Dinge von netcoreapp einholt, aber das wird viel mehr Zeit in Anspruch nehmen, und warum sollten ALLE asp.net-Frameworks an einem langsamen Fortschritt gehindert werden . Es ist irgendwie nett, einen wirklich schnellen ASP.NET Core-Stack zu haben, solange es auch einen zweiten gibt, der den Leuten eine langfristigere Unterstützung bietet, die sich an netstandard hält.

@FransBouma Oh, tut mir leid, ich wusste nicht, dass Ihre Stichprobengröße so groß ist. 257 Kommentare mit einer starken Tendenz zu Leuten, die die Entscheidung nicht mögen? Dagegen lässt sich schwer argumentieren.

HAFTUNGSAUSSCHLUSS: Ich bin kein Experte für Big Data.

@davidfowl :

In diesem Thread haben Sie System.DirectoryServices als eines der Kernelemente bezeichnet. Ich nehme an, Sie haben einige Abhängigkeiten, von denen Sie glauben, dass es lange dauern wird, bis sie portiert werden, oder solche, die niemals portiert werden. Wenn 2.0 .NET Framework unterstützt, würden sich diese Abhängigkeiten in einem Jahr verschieben?

Ja, wir haben andere Sachen. Ich weise auf System.Directory-Dienste hin, da selbst der oberste angeforderte Namespace noch nicht bereit ist. Alle anderen sind schlechter dran. Der API-Portabilitätsanalysator wird nicht einmal für VS 2017 aktualisiert, wo wir ihn ausführen können. Der Analysator, um zu sehen, ob Sie überhaupt portieren können, wurde nicht investiert, und wir stellen den Support bereits ein.

Welche?

Razor Pages ist riesig, ich habe es mehrmals erwähnt.

Ich weiß nichts über stackoverflow.com, aber ist es möglich, Teile abzubrechen (ich möchte nicht "Mikrodienste" sagen), damit ASP.NET Core für einige Teile verwendet werden kann?

Nein, das ist nicht wirklich möglich. Wir rendern nicht in 18 ms, indem wir API-Aufrufe tätigen und Overhead zwischen den Dingen hinzufügen. Ich gehe jederzeit gerne auf Architektur ein, Sie werden sehen, dass das kein wirklich vernünftiger Weg ist.

Ich dachte, ich hätte das schon früher erklärt, aber hier ist es noch einmal:

Jede API, die Teil von netstandard ist und weiterentwickelt werden muss, wird sich langsam weiterentwickeln. Dinge können auf netstandard aufgebaut werden und überall laufen, und das ist in Ordnung. In dem Moment, in dem Sie eine neue API für beispielsweise einen HTTP-Client oder SSL-Stream oder Int oder String oder Array oder LINQ oder eines der in NET Standard vorhandenen Primitive benötigen, muss eine neue .NET Standard-Version erstellt und implementiert werden zuzustimmen, dass sie es umsetzen werden. Nun, das ist nicht das Ende der Welt, denn wir besitzen jetzt die meisten von ihnen, Mono, .NET Core, .NET Framework, UWP, aber es gibt andere wie Unity (und wahrscheinlich noch andere). Jede .NET-Vertikale hat ihren eigenen Zeitrahmen und Auslieferungszyklus, sie sind jeweils ihre eigenen separaten Produkte und das kann nicht ignoriert werden.

Aber jetzt kommen Sie auf die Idee, eine neue Netstandard-Version wird erstellt, wenn neue APIs online gehen. Wenn Bibliotheken diese neuen APIs verwenden möchten, verliert man sofort den Atem an Unterstützung für alle Plattformen. Sie können über Kreuz kompilieren und versuchen, Polyfill zu erstellen, aber das skaliert nicht für alle Änderungen.

Hoffentlich gibt Ihnen das eine Vorstellung davon, wie der Prozess aussehen könnte, APIs zu netstandard zu bringen. @terrajobst hätte eine bessere Vorstellung davon, was der Plan ist.

@DamianEdwards und @shanselman Was ist mit Service Fabric und Komponententests?

In unserem Fall haben wir ein großes Mikrodienstprojekt mit vielen SF-Anwendungen, die Core-Projekte sind, aber .Net Framework 4.5 bis 4.6 (etwas) verwenden. SF unterstützt derzeit netcoreapp nicht, daher mussten wir .Net Framework verwenden, aber da wir nicht ins Hintertreffen geraten wollten, haben wir das .Net Core-Projekt verwendet.

(Ein weiteres Problem ist) Da unsere Dienste .Net Framework sind und MS Fakes für netcoreapp nicht verfügbar sind, sind alle unsere Komponententests normale (oder sollte ich sagen ältere) .Net Framework-Projekte. Fast alle unsere Bibliotheken sind auf Netzstandard 1.0 bis 1.6.

Auch hier verwenden unsere Client-Apps Xamarin Forms + UWP, und wir haben es geschafft , netstandard zu verwenden, damit unsere Bibliotheken kompatibel sind.

Bedeutet dies, dass wir feststecken und nicht auf .Net Core 2.0 und netcoreapp2.0 und netstandard 2.0 upgraden können?

@ Nick Craver

Razor Pages ist riesig, ich habe es mehrmals erwähnt.

Ich verstehe das, aber ich kann nicht glauben, dass Sie den gesamten Stapelüberlauf nur in Rasiermesserseiten konvertieren werden. Wenn Sie MVC bereits heute verwenden, warum portieren Sie nicht einfach auf normale Ansichten und wenn mehr Abhängigkeiten online gehen, portieren Sie auf Razor Pages. Die Art und Weise, wie Razor Pages gestaltet sind, macht es trivial, von einer Controller-Aktion zu einer Razor Page zu wechseln.

Ja, wir haben andere Sachen. Ich weise auf System.Directory-Dienste hin, da selbst der oberste angeforderte Namespace noch nicht bereit ist. Alle anderen sind schlechter dran. Der API-Portabilitätsanalysator wird nicht einmal für VS 2017 aktualisiert, wo wir ihn ausführen können. Der Analysator, um zu sehen, ob Sie überhaupt portieren können, wurde nicht investiert, und wir stellen den Support bereits ein.

Stellen Sie einfach sicher, dass Sie diese Liste der Abhängigkeiten eskalieren, damit wir wissen, was wichtig ist.

@abo

Bedeutet dies, dass wir feststecken und nicht auf .Net Core 2.0 und netcoreapp2.0 und netstandard 2.0 upgraden können?

Sie meinten ASP.NET Core 2.0 und? .NET Core 2.0 und .NET Standard 2.0 kommen hier nicht wirklich zur Anwendung.

Ja, Sie müssen auf ASP.NET Core 1.x bleiben.

Der Großteil der Arbeit zur Kompatibilität wurde in .NET Core 2.0 und .NET Standard 2.0 geleistet. ASP.NET Core 2.0 hat ehrlich gesagt nicht so viele neue Funktionen. Uns wird gesagt, dass wir SignalR auf ASP.NET Core 1.x zurückportieren werden (was sowieso Post 2.0 ist). Ist es nur eine Wahrnehmungssache?

@davidfowl Ich denke, Sie unterschätzen massiv die Angst, die das Herz eines Windows-Entwicklers trifft, wenn Ihnen gesagt wird, dass Sie Dinge migrieren müssen. _Besonders_ wenn der neue Stack die Feature-Parität mit dem alten Stack nicht erreicht hat und es nicht bekannt ist, ob und wann das passieren wird. Dies kündigt im Grunde das EOL von ASP.NET Core für das vollständige .NET Framework an. Und obwohl das wahrscheinlich nicht der langfristige Plan war, wurde es als Feature angekündigt, und die Leute dachten, es könnte noch eine Weile so bleiben. Die Roadmaps verschieben sich, während wir hier sprechen. Besprechungen werden stattfinden.

Wir haben ein paar ekelhaft alte Sachen, die wir wegen nominell gewarteter Datenbankkonnektoren und SDKs unterstützen müssen. Einige dieser Anbieter werden viel wahrscheinlicher eine neue, abgeschlachtete API mit 30 % bestehender Funktionalität, einer HTML5-Oberfläche und einer neuen Reihe von Fehlern veröffentlichen, als ihre bestehenden Produkte zu warten. Oder sie übernehmen einfach einen Konkurrenten, bringen das Produkt auf den Markt und beenden es schnell. Einige dieser Anbieter sind groß genug, um erkennbar zu sein. Wir haben eine Menge netten Code, aber ein Teil dieses Codes lebt trotz unserer Bemühungen auch in den Windows-Slums, weil er nicht immer unter unserer Kontrolle ist. Alte Technologie geht nicht einfach elegant in den Ruhestand. Es lauert unter Ihrem Bett, in unserem Schrank und unter Ihrer Tastatur.

Ich mache mir mehr Sorgen über diesen Schritt, der das mögliche Ausscheiden von .NET Standard signalisiert, als über den Rest. .NET Standard schien zunächst etwas zu sein, das die verschiedenen Implementierungen näher und näher an die Feature-Parität bringen würde, während es den Verbrauchern ermöglichte, auf die sich entwickelnde, wachsende Plattform zu migrieren. Jetzt klingt es wie nichts weiter als ein Meilenstein der .NET Core-Features. Sie können (oder wollen) keine ausführbaren Dateien auf .NET Standard ausrichten – nur Bibliotheken. Und es hört sich so an, als würde .NET Standard deutlich weniger Planung erfordern und stattdessen einfach mit dem abgesegnet werden, was in ASP.NET verwendet wurde, weil es für eine Änderung bereits zu spät ist. Es wird schließlich bereits in Produktion sein.

Andere Entwickler müssen den Code mit Compiler-Direktiven bestreuen, den Code in plattformspezifische Bibliotheken aufteilen und mit mehreren Zielen kompilieren. Der unhöfliche Teil von mir möchte, dass das ASP.NET Core-Team das dogfoodt, damit Sie an besserer Laufzeit- und Toolunterstützung für Multi-Targeting- und Multi-Plattform-Szenarien interessiert sind. Und wenn Ihr Team es möchte, bekommen wir es vielleicht. Der praktische Teil von mir sagt, dass Sie mindestens regelmäßige Versionen von ASP.NET Core haben sollten, die auf .NET Standard abzielen. Sie müssen sowieso aktuelle _stable_ Releases machen. Niemand wird einfach den Master-Branch aus Git kompilieren und in der Produktion bereitstellen. Warum nicht kleinere Iterationen des .NET-Standards erstellen und sie mit einer getaggten ASP.NET-Version abgleichen?

Wird es außerdem ein neues ASP.NET für den Desktop geben? All die Fanfare ließ es so klingen, als wäre ASP.NET Core das einzige ASP.NET. Jetzt hört es sich so an, als würden Sie auf ASP.NET nichts Neues erhalten, es sei denn, Sie sind auf .NET Core. Und das wird viele Geschäftsstrategien verändern. Bei Roadmaps herrscht eine Menge Verwirrung.

MVC 5 wird nie verschwinden, wir verwerfen nichts. Es wird unterstützt, solange .NET Framework existiert.

Ja, wir sind uns ziemlich bewusst, dass das alte Zeug dort bleiben wird. Das tut es normalerweise, und wir wissen das zu schätzen. Aber ob neue Dinge auf den "vollen" Rahmen kommen, ist sehr wichtig. Wir müssen wissen, wohin die Dinge gehen. Wir wollen nicht bis zum Ende mit dem Zug fahren und erst dann darüber nachdenken, wie es weitergeht. Wir haben auch unsere Passagiere, um die wir uns Sorgen machen müssen. Und die Diskrepanz zwischen .NET Core und .NET Framework lässt viele Menschen im Hinblick auf die Zukunft ungewiss zurück. Ich habe vor anderthalb Jahren eine Frage dazu gestellt, wann ein bestimmter Teil der Funktionalität in .NET Core unterstützt wird. Ich fragte sogar, ob es akzeptiert würde, wenn ich persönlich daran arbeiten würde. Die Kommunikation war spärlich. Ich habe noch keine Ahnung, was damit passieren wird. Diese Art von Ungewissheit über unterstützte Szenarien und Zeitpläne macht einen großen Unterschied in dem Code, den wir schreiben. Selbst wenn man weiß, welche Abschnitte des Desktop-Frameworks eine niedrige Priorität haben, könnte man ausreichend Zeit für die Migration haben, anstatt auf Statusaktualisierungen warten zu müssen.

Kurz gesagt, ich unterstütze, was Sie tun und die Ziele dahinter. Und ich weiß, es ist hart, wenn wir hier weiterkommen und uns über Entscheidungen beschweren, die Sie aus einem sehr guten Grund getroffen haben. Aber viele Leute werden nicht auf den Pionierzug aufspringen, weil sie es nicht können, und andere nicht, weil sie nicht wissen, wohin er führt.

@davidfowl denke ich. Wie nennt man ein Kernprojekt (neu) mit .Net Framework? Was auch immer das ist, ich verstehe aus dem Beitrag, dass der Netzstandard vNext dies nicht unterstützt.

@markrendle Wir sind echte Kunden. Wir sagen den Leuten, dass die Dinge nicht funktionieren werden. Ich kenne meine Architektur besser als Sie, also helfen die arroganten Kommentare nicht. Zu deinen Punkten:

Das Team macht das nicht nur zum Spaß. Es gibt eine ganze Reihe neuer Features und Optimierungen, die bereit (oder fast bereit) sind, in .NET Core eingeführt zu werden, die unglaublich nützlich für Leute sind, die moderne Webanwendungen, APIs und Microservices erstellen und darauf warten, dass diese Features im vollständigen Windows .NET Framework landen würde die Veröffentlichung um viele Monate verzögern.

Niemand ist dagegen, dass sie diese Dinge auch unterstützen. Unsere Beschwerden beziehen sich allgemein darauf, den Support einzustellen und nicht bedingt neue Funktionen hinzuzufügen.

Viele der Beschwerden, die ich in diesem Thread sehe, sind Variationen von „Ich kann X in .NET Core 2.0 nicht ausführen“, wenn der Autor eigentlich meint: „Ich muss die Art und Weise ändern, wie ich X in .NET Core 2.0 mache“. Ja, du musst dich ändern. Nein, das ist nichts Schlimmes. Wenn Sie eine kleine diskrete Funktionalität in Ihrer ASP.NET MVC-Anwendung haben, die etwas mit PDFs oder DOCX-Dateien macht, und Sie wirklich keinen besseren Weg finden können, was auch immer das ist (haben Sie es versucht?), dann brechen Sie das Funktionalität in einen Microservice aus, der auf vollständigem .NET auf Windows Server ausgeführt wird, und rufen Sie ihn als HTTP-API von Ihrer .NET Core-Anwendung auf. Das Zerlegen von Anwendungen und das Verschieben bestimmter Funktionen in kleine, eigenständige Dienste ist nicht einmal eine Problemumgehung, sondern eine allgemeine Best Practice.

Das ist einfach so weit weg von der Basis, dass ich nicht weiß, wo ich anfangen soll. Unsere Seiten wären in "Micro-Services" viel langsamer und teurer. Wir würden mit einem solchen Setup deutlich mehr Zeit in GC fressen als in Seitenrenderern. Dies macht auch die Annahme, dass die vollständige Framework-Abhängigkeit kein kritischer Teil jeder Seitenwiedergabe ist. Schlechte Annahme.

.NET Core 2.0 befindet sich noch nicht einmal in der richtigen öffentlichen Vorschau, daher scheint es verfrüht zu sein, sich darüber zu beschweren, dass es keine Unterstützung für LDAP oder was auch immer hat. Wenn RTM in Q3 kommt und es immer noch keine Möglichkeit gibt, mit AD oder Kerberos oder was auch immer zu interagieren, dann beschweren Sie sich (obwohl Sie auch über die Migration zu modernen Token-basierten Authentifizierungssystemen nachdenken, weil wir nicht mehr 2008 sind).

Uns wurde gesagt , dass sie nicht da sein werden. Beobachte den Aufstand. Oder schauen Sie sich GitHub an, wo es mit "Future" beschriftet ist. Wir beschweren uns jetzt, weil diese schlechte Entscheidung in Q3 ausgeliefert wird.

Es gibt eine reibungslose Migration von ASP.NET MVC 4.5 zu ASP.NET Core 2.0. Es heißt ASP.NET Core 1.0 (und ich stimme zu, dass es unter den gegebenen Umständen ein gewisses Versprechen auf langfristige Unterstützung für 1.0 geben sollte).

Langfristige Unterstützung bedeutet nicht, dass es keine Sackgasse ist. Wir können immer noch leicht auf 1.x festsitzen, wenn es das Ende seiner Lebensdauer erreicht. In diesem Fall hätten wir längere Unterstützung für das vollständige Framework gehabt.

Das vollständige .NET holt auf und Sie können ASP.NET Core 2.x darauf ausführen

Es zielt auf netcoreapp ab, das wird nicht passieren.

... oder welche Technologie von Drittanbietern Sie verwenden, um .NET Core zu unterstützen (oder durch eine gleichwertige Technologie ersetzt werden kann, die .NET Core unterstützt).

Diese Bibliotheken liegen oft außerhalb der Kontrolle und des Zeitbudgets der Menschen. Auch Bibliotheken von Microsoft werden nicht aktualisiert . Ich kämpfe gerade mit dem SQL-Team, um ihre Pakete zu aktualisieren, damit sie auf dem neuen Projektsystem funktionieren, weil install.ps1 funktioniert. Wenn wir nicht einmal diese einfachen Korrekturen einbauen können, sind wir mit netstandard Ports am Arsch.

Denken Sie daran, dass – während Ihr Team möglicherweise durch externe Abhängigkeiten oder interne Unternehmensrichtlinien oder -politik oder einfach nur Trägheit behindert wird – es Hunderttausende, wenn nicht Millionen von Entwicklern auf der Welt gibt, die versuchen, Anwendungen, Dienste und APIs mit modernen zu erstellen Architekturmuster und neue Technologieplattformen (Cloud/Edge/IoT/etc), für die ASP.NET Core 2.0 hervorragend geeignet ist. Sie wollen, dass es schnell, skalierbar und plattformübergreifend ist; Diese Dinge sind vielen Menschen wichtig. Von Microsoft zu verlangen, diesen schnell wachsenden Markt zu ignorieren, nur weil Ihr Drittanbieter von Steuerungen oder ein Open-Source-Projekt seinen Code noch nicht portiert hat, ist dumm.

Es dumm zu nennen, ist herabsetzend, unhöflich und unangebracht. Das ist unser Leben. Das sind unsere Apps. Das sind die Dinge, an denen wir Jahre oder Jahrzehnte gearbeitet haben, um sie zu erschaffen, und plötzlich stellen wir vor der Veröffentlichung fest, dass die Aussicht für uns zeitlich begrenzt ist, hart. Eine Menge Unsicherheit wird eingeführt, um es gelinde auszudrücken. Das ist nicht wirklich etwas, was Sie in Ihrer Karriere wollen.

Jeder Punkt macht Sinn, aber denken Sie daran, dass in diesem Universum alles in den Zustand gehen wird, der weniger Energie erfordert, dann stellen Sie sicher, dass dieser Zustand der ist, in den Sie gehen möchten, denn wir werden auf die eine oder andere Weise dorthin gelangen.
Wenn Sie also einen bestimmten Zustand erreichen möchten, stellen Sie sicher, dass er weniger Energie benötigt als der, der erforderlich ist, um dort zu bleiben, wo wir jetzt sind.

Ich habe gerade diesen ganzen Thread durchgelesen, nachdem jemand dies als Nebenbemerkung im IRC erwähnt hatte - ich habe noch keine offizielle Ankündigung dazu gesehen - und ich bin gründlich enttäuscht.

Ich habe .NET Core beobachtet, mitgemacht und kleine Projekte von .NET Framework auf .NET Standard / .NET Core umgestellt, um Erfahrungen mit dem neuen SDK und der Runtime zu sammeln und diese Projekte unter macOS und Linux auszuführen .

Mein großes Ziel ist ein großer Unternehmenswebdienst, der eine Menge Komponenten verwendet, die [noch] nicht in .NET Core 1.0 oder 1.1 verfügbar sind. Dazu gehören, nur aus der Spitze meines Kopfes:

  • Active Directory ( System.DirectoryServices ), wird für die Authentifizierung und Benutzerverwaltung verwendet
  • Entity Framework 6 ( EntityFramework ), da EF Core viele der von uns verwendeten Funktionen noch nicht unterstützt.
  • OData ( Microsoft.Data.Services / System.Data.Services ) v1-3, die von uns verwendete Client-JavaScript-Bibliothek unterstützt v4 (noch) nicht, und WebAPI-OData ist viel komplexer einzurichten.
  • IIS-Verwaltung ( System.Web.Management ) und .NET Remoting ( System.Runtime.Remoting ) für die Fähigkeit des Webdienstes, sich selbst zu aktualisieren – obwohl dies in eine eigenständige Anwendung extrahiert werden könnte.
  • SignalR
  • Benutzerdefinierte IHttpHandler s und IHttpModule s, die an das Äquivalent von ASP.NET Core angepasst werden müssten, wahrscheinlich eine Art Middleware
  • Eine ganze Reihe von benutzerdefinierten Dingen, die die Erweiterbarkeit von ASP.NET WebAPI verwenden.
  • Ich denke, wir könnten sogar Microsoft.TeamFoundationServer.ExtendedClient auf dem Server verwenden, der nur net46 unterstützt, einige native Assemblys hat und eine Chance von etwa 0 % hat, an .NET Core 2.0 zu arbeiten.
  • usw.

Aufgrund der Größe und Komplexität dieses Dienstes müsste jede Migration zu .NET Core schrittweise erfolgen, und aller Wahrscheinlichkeit nach müssen wir möglicherweise einige neue APIs in ASP.NET-Core-2.0 verwenden, ich weiß es nicht doch so weit sind wir noch nicht gekommen.

Das Entfernen der Möglichkeit, ASP.NET Core auf dem .NET Framework auszuführen, bedeutet, dass Migrationen im Big-Bang-Stil durchgeführt werden müssen, wenn ASP.NET Core 1.x kein praktikables Sprungbrett ist. Wir verlieren sofort die Phase „Neues Framework auf alter Laufzeit ausführen“ vor „Neues Framework auf neuer Laufzeit ausführen“. Dies ist eine schreckliche Change-Management-Strategie für jedes große System.

Ich hätte nichts dagegen, wenn die .NET Framework-Unterstützung eingestellt würde, sobald .NET Core auf oder nahe der Parität war, aber es ist immer noch ziemlich weit zurück für jede ausreichend fortgeschrittene Anwendung, und ich denke nicht, dass 2.0 der richtige Ort ist, um eine solche zu erstellen eine bahnbrechende Veränderung.

@davidfowl

Ich verstehe das, aber ich kann nicht glauben, dass Sie den gesamten Stapelüberlauf nur in Rasiermesserseiten konvertieren werden. Wenn Sie MVC bereits heute verwenden, warum portieren Sie nicht einfach auf normale Ansichten und wenn mehr Abhängigkeiten online gehen, portieren Sie auf Razor Pages. Die Art und Weise, wie Razor Pages gestaltet sind, macht es trivial, von einer Controller-Aktion zu einer Razor Page zu wechseln.

Viele Bibliotheken usw., die von Apps gemeinsam genutzt werden, sind hier im Spiel. Stack Overflow besteht aus vielen Anwendungen (die Hauptwebsite ist fast ausschließlich eine einzige App, aber als Unternehmen: Wir haben viele verwandte, kommunizierende Dinge.

Stellen Sie einfach sicher, dass Sie diese Liste der Abhängigkeiten eskalieren, damit wir wissen, was wichtig ist.

Ja, das mache ich. Aber das wird nicht die letzte Abhängigkeit sein, nur der größte Blocker, da wir uns ohne sie nicht einmal bei einigen Apps anmelden können. Es ist ein First-Screen-Breaker. Ich werde diese Woche versuchen, die vollständige Portabilitätsanalyse für unsere Apps durchzuführen (nach einem Start heute Morgen), aber ich fürchte, es wird nur deprimierender. Es wäre hilfreich, wenn der Analysator sogar für aktuelle Werkzeuge aktualisiert würde, bevor solche Bewegungen überhaupt in Betracht gezogen würden.

Daten helfen, ich werde versuchen, mehr Daten von Ihnen zu bekommen - es sei denn, es besteht keine Chance, dass sich diese Entscheidung ändert. Wenn dies der Fall ist, teilen Sie uns dies bitte mit, damit ich nicht mehr Zeit dafür investiere.

Nur fürs Protokoll: OData ist eine weitere Bibliothek, die netcoreapp noch nicht unterstützt.

Eigentlich basiert es sogar noch auf System.Web (man muss es über OWIN-Middleware in ASP.NET Core verwenden) und sie haben Unterstützung versprochen (siehe https://github.com/OData/WebApi/issues/939).

Trotzdem erwähnenswert. Zumal es von Microsoft ist.

EDIT: @yaakov-h war 2 min schneller, also +1 für seine Erwähnung von OData

Ich bin immer noch hier, um aus ein paar Gründen zu antworten

  • ich kümmre mich
  • Schlaf ist für die Schwachen 😆
  • Ich muss die FUD anrufen, weil jemand im Internet falsch liegt

@ Nick Craver

Viele Bibliotheken usw., die von Apps gemeinsam genutzt werden, sind hier im Spiel. Stack Overflow besteht aus vielen Anwendungen (die Hauptwebsite ist fast ausschließlich eine einzige App, aber als Unternehmen: Wir haben viele verwandte, kommunizierende Dinge.

Es bedeutet nur, dass Sie keine Razor-Seiten verwenden können, ASP.NET Core 2.0 hat viele kleine Dinge, aber es gibt keine großen Funktionen oder Korrekturen, die nicht auch auf 1.x zurückportiert werden. Die EOL-Sache ist sehr real, und ich persönlich glaube nicht, dass ASP.NET Core 2.0, das .NET Framework für ein weiteres Jahr unterstützt, helfen würde. Wir diskutieren hier wirklich über einen Richtungswechsel, entweder wir unterstützen .NET Framework für immer oder nicht, es gibt wirklich kein Dazwischen.

@dustinmoris ist nicht nur das. ist auch ein Erwartungsproblem. Ihr Anwendungsfall ist möglicherweise nicht derselbe wie bei allen anderen.

Ich entwickle aspnetcore 1.*-Apps und verwende den .NET-Desktop als Laufzeitumgebung (LOB für Unternehmen).

Und ich verstehe, was der Unterschied zwischen .net Core Runtime, Netstandard usw. ist (nur um sicherzugehen, dass dies kein Kommentar zu einem Missverständnis darüber ist)

Meine Migration war zuerst auf Aspnet Core (Ziel .net Desktop), weil der Flow/Vision/etc, konsolidieren und NACH dem Verschieben auf .net Core (falls möglich) das entscheidende Szenario bei der Aspnetcore-Wahl war.

Dieses Problem ist nur ein bisschen unerwartet, da aspnetcore 1. * immer als "auf beiden Frameworks ausgeführt" vermarktet wurde, ohne afaik Warnungen darüber, dass es als nächstes gelöscht wird (Version oder Jahr).
Ich hatte zumindest einen veralteten -> veralteten Zyklus erwartet oder nur nicht unterstützte Funktionen (das ist in Ordnung).

Das Gute an .net (und aspnet als Wahl für Webstack) ist, dass ich vorhandene Codebasis und Bibliotheken nutzen kann.
Einige sind intern, es lohnt sich nicht, diese zu migrieren, wenn das Ziel (.net core/netstandard) zu fließend ist.
Einige sind extern und schwer zu ändern, wenn diese in der netcoreapp2-Closure nicht funktionieren, kann ich diese nicht verwenden.

Außerdem war meine Idee zu netstandard2 zu konsolidieren, nicht zu netcoreapp2 .
Wie kann ich anfangen, die Migration von Libs auf netstandard2 einfach zu evaluieren, wenn es noch nicht da ist? Es ist schwierig, die Migration auf der Grundlage von Vorschaubits und -versprechen zu bewerten (und die letzten Jahre haben mein Vertrauen in die Stabilität von Versprechen verringert).

Ich verstehe, dass es ein anderes Szenario ist als vollständig auf der grünen Wiese, aber auch wenn ich auf der grünen Wiese einige Bibliotheken wiederverwenden möchte, weil ich mit dem vorhandenen System (Excel/PDF/etc) interagieren muss und nicht alles von Grund auf neu schreiben muss.
Oder fügen Sie Microservices als rpc hinzu, nur weil es der neueste Trend ist, weil es die Dinge komplizierter macht (das ist eine bewusste Entscheidung, die ich evaluieren und tun möchte, nicht gezwungen zu sein, vorhandene Bibliotheken zu umschließen). Ich muss Wert liefern (Aspnetcore-Entwicklungsfluss ist nett und produktiv), nicht nur die Architektur ändern.

In meiner persönlichen Bewertung des Ökosystems ist für meinen Anwendungsfall die Verfügbarkeit von .net Core und/oder netstandard lib atm zu gering (nicht jeder verwendet nur kostenlose nuget.org oss-Pakete). Wenn ich also hart auf einen neuen Stack migrieren muss, muss ich auch andere Stacks bewerten (Kosten/Nutzen/Zukunft/Vertrauen/usw.)

Ich schreibe nicht nur eine TODO-Web-App, ich verwende .NET, weil ich viele Jahre an Sachen fertig habe, damit ich eine Sache ändern kann (in diesem Fall Aspnetcore und den Rest für diese Iteration so lassen wie er ist).
Einfach alles zu ändern ist in meinem Szenario ein Rezept für eine Katastrophe, und wenn ich das tun muss, muss ich wirklich anfangen zu bewerten, ob es sinnvoller ist, auf einen anderen Stack (als Java/Knoten) zu migrieren, auf dem lib existiert.

Eine reibungslose Migration braucht Zeit, ich mag die Vision für den zukünftigen Aspnet-Kern. Aber wenn ich keinen klaren Weg habe (oder daran zweifle), ist es schwierig, intern zu verkaufen.

Lassen Sie den .net-Desktop jedoch hinter sich. Dies kann ein gutes Spiel für das Aspnet-Team sein, um schneller voranzukommen und mehr neue Benutzer auszuwählen (oder keine Strömungen an Node/Java zu verlieren).
Aber sicher wird das Leben für Entwickler auf langsamerem Ring schwieriger, und dies ist Aspnet Team Call (ihr Produkt).
Mein Feedback ist, das nicht zu tun und hart daran zu arbeiten, fw zu unterstützen, denn als Entwickler brauche ich Vertrauen und Stabilität, und die letzten Jahre waren im .net-Ökosystem etwas zu flüssig (nicht nur netcore/project.json, sondern davor auch, und Marketing/Evangelist hat nicht dazu beigetragen, das Vertrauen zu verringern)

@yaakov-h

Wenn Sie sich für eine Portierung auf ASP.NET Core (entweder 1.x oder 2.x) entscheiden, benötigen Sie einen anderen Prozess. ASP.NET Core wird nicht auf System.Web ausgeführt, sodass Sie keinen schrittweisen Port im selben Projekt durchführen können.

Ich hätte nichts dagegen, wenn die .NET Framework-Unterstützung eingestellt würde, sobald .NET Core auf oder nahe der Parität war, aber es ist immer noch ziemlich weit zurück für jede ausreichend fortgeschrittene Anwendung, und ich denke nicht, dass 2.0 der richtige Ort ist, um eine solche zu erstellen eine bahnbrechende Veränderung.

Es gibt keinen richtigen Zeitpunkt, um es fallen zu lassen. Es war nie dazu gedacht, die Parität mit .NET Framework zu erreichen, und es ist durchaus möglich, dass Sie Abhängigkeiten haben, die niemals portiert werden. Angesichts dessen wäre meine Frage, entwerfen Sie die Anwendung neu oder müssen Sie realistischerweise für immer auf .NET Framework bleiben?

@davidfowl , das hängt ganz von unseren Upstream-Abhängigkeiten ab. Zu diesem Zeitpunkt würden wir für immer auf .NET Framework bleiben.

Interessanterweise sind bei den meisten Drittanbietern bereits netstandard -Releases verfügbar. Es sind größtenteils die Microsoft-Abhängigkeiten, die uns auf .NET Framework halten, und einige davon scheinen halb aufgegeben zu sein (z. B. OData).

@NickCraver Ich möchte nicht herabsetzen oder beleidigend sein. Ich weiß zu schätzen, dass dies eine späte Änderung ist, und das ist frustrierend für jeden Teil der Community, der davon betroffen ist, und wenn ich davon betroffen wäre, würde ich wahrscheinlich auch Aufhebens machen. Ich bin es nicht (wo ich arbeite, arbeiten wir immer noch mit ASP.NET WebAPI 5.2.3), daher ist meine Einschätzung der Situation weniger emotional.

Betrachten Sie es so: Wenn Sie heute ganz von vorn anfangen würden, den nächsten Stack Exchange (was auch immer das sein mag) zu erstellen, würden nicht die Dinge in netcoreapp20 , die das ASP.NET Core-Team verwenden möchte ( wie UTF8Strings und Pipelines und niedrige Allokation, asynchrone, _schnelle_ Primitive (ich vermute da ein bisschen)) machen es für Sie attraktiver als volles .NET? Wäre .NET Core 2.0 im Allgemeinen nicht sinnvoller als das vollständige .NET 4.7.1? Wenn Sie zwischen Web-Stacks, die sich schnell weiterentwickeln und an Veränderungen anpassen können, und Web-Stacks wählen müssten, die unwiderruflich an eine sich langsam entwickelnde zugrunde liegende Technologie mit fast zwei Jahrzehnten an Legacy-Code gebunden sind, um deren Unterstützung Sie sich Sorgen machen müssen, was würden Sie wählen?

@ZigMeowNyan

Ich mache mir mehr Sorgen über diesen Schritt, der das mögliche Ausscheiden von .NET Standard signalisiert, als über den Rest. .NET Standard schien zunächst etwas zu sein, das die verschiedenen Implementierungen näher und näher an die Feature-Parität bringen würde, während es den Verbrauchern ermöglichte, auf die sich entwickelnde, wachsende Plattform zu migrieren. Jetzt klingt es wie nichts weiter als ein Meilenstein der .NET Core-Features. Sie können (oder wollen) keine ausführbaren Dateien auf .NET Standard ausrichten – nur Bibliotheken. Und es hört sich so an, als würde .NET Standard deutlich weniger Planung erfordern und stattdessen einfach mit dem abgesegnet werden, was in ASP.NET verwendet wurde, weil es für eine Änderung bereits zu spät ist. Es wird schließlich bereits in Produktion sein.

Das sind eigentlich wirklich gute Punkte und eine Überlegung wert. Sie müssen verstehen, dass es nichts damit zu tun hat, dass .NET Standard an den Rand gedrängt wird, es ist nur Physik. Wenn sich jede .NET-Plattform in ihrem eigenen Tempo bewegt, bedeutet die Verwendung des neuesten .NET-Standards, dass die langsameren Frameworks seltener Probleme bekommen. Das sollte jeder verinnerlichen. Das macht es nicht weniger nützlich, es liegt einfach in der Natur des Tieres. Die einzige Möglichkeit, diese Last zu beseitigen, besteht darin, eine einzige Implementierung und einen einzigen Auslieferungsplan zu haben, was die Orte, an denen .NET ausgeführt werden kann, stark einschränkt.

Andere Entwickler müssen den Code mit Compiler-Direktiven bestreuen, den Code in plattformspezifische Bibliotheken aufteilen und mit mehreren Zielen kompilieren. Der unhöfliche Teil von mir möchte, dass das ASP.NET Core-Team das dogfoodt, damit Sie an besserer Laufzeit- und Toolunterstützung für Multi-Targeting- und Multi-Plattform-Szenarien interessiert sind. Und wenn Ihr Team es möchte, bekommen wir es vielleicht. Der praktische Teil von mir sagt, dass Sie mindestens regelmäßige Versionen von ASP.NET Core haben sollten, die auf .NET Standard abzielen. Sie müssen sowieso tatsächliche stabile Releases erstellen. Niemand wird einfach den Master-Branch aus Git kompilieren und in der Produktion bereitstellen. Warum nicht kleinere Iterationen des .NET-Standards erstellen und sie mit einer getaggten ASP.NET-Version abgleichen?

Wir machen dasselbe, denken Sie daran, wir zielen immer noch auf Netstandard für eine Reihe unserer Bibliotheken ab, und diese enthalten ifdefs. Andere hingegen zielen auf netstandard ab, um uns für die Nutzung neuer APIs im 2.x-Zeitrahmen vorzubereiten.

Kurz gesagt, ich unterstütze, was Sie tun und die Ziele dahinter. Und ich weiß, es ist hart, wenn wir hier weiterkommen und uns über Entscheidungen beschweren, die Sie aus einem sehr guten Grund getroffen haben. Aber viele Leute werden nicht auf den Pionierzug aufspringen, weil sie es nicht können, und andere nicht, weil sie nicht wissen, wohin er führt.

Ehrliche Frage (das frage ich, nicht Microsoft): Bevorzugen Sie Kompatibilität gegenüber neuen Funktionen? Wenn ja, warum sollten Sie sich für ASP.NET Core entscheiden?

Nur noch ein kurzer Gedanke: Für jeden Thread wie diesen gibt es einen gleichwertigen, aber entgegengesetzten Thread, bei dem eine andere – aber genauso große – Gruppe von Leuten genauso verärgert war, weil ein Zugeständnis an die Unterstützung des „alten“ .NET gemacht wurde.

Interessanterweise haben die meisten Drittanbieter bereits Netstandard-Versionen verfügbar. Es sind größtenteils die Microsoft-Abhängigkeiten, die uns auf .NET Framework halten, und einige davon scheinen halb aufgegeben zu sein (z. B. OData).

😞

@markrendle

• Viele der Beschwerden, die ich in diesem Thread sehe, sind Variationen von „Ich kann X in .NET Core 2.0 nicht ausführen“, wenn der Autor eigentlich meint: „Ich muss die Art und Weise ändern, wie ich X in .NET Core 2.0 mache.“ . Ja, du musst dich ändern. Nein, das ist nichts Schlimmes. Wenn Sie eine kleine diskrete Funktionalität in Ihrer ASP.NET MVC-Anwendung haben, die etwas mit PDFs oder DOCX-Dateien macht, und Sie wirklich keinen besseren Weg finden können, was auch immer das ist (haben Sie es versucht?), dann brechen Sie das Funktionalität in einen Microservice aus, der auf vollständigem .NET auf Windows Server ausgeführt wird, und rufen Sie ihn als HTTP-API von Ihrer .NET Core-Anwendung auf. Das Zerlegen von Anwendungen und das Verschieben bestimmter Funktionen in kleine, eigenständige Dienste ist nicht einmal eine Problemumgehung, sondern eine allgemeine Best Practice.
NB Soweit ich das beurteilen kann, unterstützen die OpenXML-Pakete jetzt den .NET-Standard, sodass das Arbeiten mit Word/Excel/was auch immer nicht unmöglich sein sollte.<<

Wie andere bereits gesagt haben, ist es kein guter Plan, die Architektur unseres schönen Designs zu ändern. In unserem Fall teilen wir Code zwischen unserem WPF-Anwendungstest und dem Server. Je mehr Unterschiede wir zwischen diesen schaffen, desto komplizierter ist es, sie aufrechtzuerhalten.

Ich kann Ihnen versichern, dass ich viel Zeit damit verbracht habe, die besten Tools zu untersuchen, die wir für die PDF- und DocX-Generierung verwenden können, und es ist bei weitem nicht so einfach wie mit Open XML. Wir verwenden eine Bibliothek eines Drittanbieters, weil es Zehntausende von Codezeilen gibt, die sie entwickelt haben, und wir sie nicht entwickeln/warten/testen müssen. Das ist der springende Punkt.

Die .net-Versionierung ist sehr kompliziert geworden. Mir ist nicht klar, ob ASP.net irgendwann in der Zukunft auf dem vollständigen .net-Framework verwendet werden kann? Da ich Code zwischen dem Server und meinen Desktopanwendungen freigeben muss, bedeutet das, dass ich nie die neueste Version von ASP.Net haben kann? Kurzfristig ist dies kein Problem, aber langfristig mit Sicherheitsverbesserungen usw. möchte ich nicht zu weit von der neuesten Version entfernt sein. Ich bin mir sicher, dass es viele andere in meinem Boot gibt, bei denen Sie eine Form der Kompatibilität mit dem vollständigen Framework benötigen.

Um zu verdeutlichen, was ich tue, habe ich drei meiner eigenen Bibliotheken, die von verschiedenen WPF-Apps und meinem Server gemeinsam genutzt werden. Ich hätte zu diesem Zeitpunkt absolut keine Ahnung, welche APIs ich verwende und ob sie im.net-Kern verfügbar sind oder nicht. Und dann verwende ich in diesen Bibliotheken vollständige Desktop-Versionen der WPF-Tools von Telerik und SyncFusion zum Generieren von docx und pdf. Einige oder alle Funktionen, die diese Tools verwenden, sind möglicherweise in .net Core verfügbar oder nicht. Der Versuch, Anwendungen auf der Grundlage von may or may not zu entwickeln, ist äußerst schwierig. Microsoft hat ein brillantes Basis-Framework in .net, und obwohl ich die Argumentation hinter .net Core verstehe. Microsoft scheint die Bedeutung der Abwärtskompatibilität vergessen zu haben.

Stefan

@markrendle

Oh, Entschuldigung, ich wusste nicht, dass Ihre Stichprobengröße so groß ist. 257 Kommentare mit einer starken Tendenz zu Leuten, die die Entscheidung nicht mögen? Dagegen lässt sich schwer argumentieren. HAFTUNGSAUSSCHLUSS: Ich bin kein Experte für Big Data.

Keine Ahnung, was ich dir angetan habe, aber es gibt keinen Grund, so zu schnüffeln oder so leise zu jammern. Sie wissen genau, dass dieser Thread nur ein Beispiel ist.

@stefanson

Die .net-Versionierung ist sehr kompliziert geworden

Ich denke, das ist eines der wenigen Dinge, auf die wir uns alle einigen können.

Wir suchen nach einer Portierung auf .Net Core x.
Unsere größten Probleme sind:
NewRelic (kein .Net Core-Plan, also müssen wir eine Alternative finden)
NH (wobei EF Core nicht über die Funktionen verfügt).
ServiceBase (klingt, als würde es im Sommer zu .Net Core 2 kommen)

Es klingt sicherlich so, als müssten wir in der Zwischenzeit auf Core 1.0 abzielen und auf NH-, EF-Upgrades warten oder kreativ werden.

Es bedeutet nur, dass Sie keine Razor-Seiten verwenden können, ASP.NET Core 2.0 hat viele kleine Dinge, aber es gibt keine großen Funktionen oder Korrekturen, die nicht auch auf 1.x zurückportiert werden. Die EOL-Sache ist sehr real, und ich persönlich glaube nicht, dass ASP.NET Core 2.0, das .NET Framework für ein weiteres Jahr unterstützt, helfen würde. Wir diskutieren hier wirklich über einen Richtungswechsel, entweder wir unterstützen .NET Framework für immer oder nicht, es gibt wirklich kein Dazwischen.

Es ist etwas größer als Razor-Seiten, das heißt, es gibt keinen Grund, sich zu bewegen . Es gibt einfach kein (aktuelles) Szenario, in dem beides existiert:

  1. Wir werden die ganze Zeit unterstützt
  2. Auf der anderen Seite gibt es ein echtes Upgrade

Tatsache ist, dass ASP.NET Core ohne das Ökosystem nicht wirklich nützlich ist. Einen Controller zu haben, der Text wiedergibt, ist großartig, aber für so viele Szenarien nicht nützlich. Wir brauchen die APIs. Wir brauchen die Bibliotheken. Wir brauchen das Ökosystem, deshalb haben wir uns in erster Linie für .NET entschieden .

Diese Änderung geht von einem Framework, das unsere heutigen Anwendungsfälle vollständig unterstützt, zu einem Framework über, das eindeutig noch nicht bereit ist. Es ist noch lange nicht fertig. Und eine Vorschau, um zu testen, ob es fertig ist, ist nicht einmal allgemein verfügbar. Eine Migration, um die Versprechungen dessen, was fertig sein wird, herauszufinden, ist nicht verfügbar. Wir setzen auf eine ganze Reihe von Versprechungen und viele werden verbrannt. Das ist die denkbar schlechteste Art, diese Dinge zu vermarkten: zu viel versprechen und zu viel liefern (das Gesamterlebnis).

Ich finde ASP.NET Core großartig. Ihr macht tolle Sachen. Ich hatte das Glück, bei einigen davon helfen zu können. Aber dieser Schalter zu diesem Zeitpunkt ist schlecht. Wenn all die Dinge, von denen wir glauben, dass sie portiert werden, tatsächlich in den 2.x-Zeitrahmen portiert werden, dann großartig. Nehmen Sie dann die Änderung in 3.x vor. Es ist schlecht, zu portieren, bevor eine Alternative fertig ist, und eine Frist festzulegen, wann die EOL-Lebenslinie beendet werden soll. Leuten zu sagen, sie sollten auf eine Wartungsversion -> EOL-Version portieren, ist schlecht.

Bitte nehmen Sie diese Änderung jetzt nicht vor. .NET ist besser als das. Zeigen Sie, dass Sie sich genauso um Ihre Benutzer kümmern, wie sich alle hier um Sie kümmern. Wir wären nicht hier, wenn wir nicht helfen wollten.

@FransBouma Sie (sollten) genau wissen, dass Microsoft über riesige Datenbanken mit Telemetrie, Feedback und anderen Daten darüber verfügt, was die Leute mit ihrer Technologie tun, die ein viel klareres Bild vermitteln als jede Anzahl von GitHub-Issues-Threads, und ich glaube nicht, dass meine Darauf hinzuweisen, war noch bissiger als

Oh, ich weiß nicht, nachdem ich die Beiträge in diesem Thread gelesen habe?

Die .net-Versionierung ist sehr kompliziert geworden. Mir ist nicht klar, ob ASP.net irgendwann in der Zukunft auf dem vollständigen .net-Framework verwendet werden kann? Da ich Code zwischen dem Server und meinen Desktopanwendungen freigeben muss, bedeutet das, dass ich nie die neueste Version von ASP.Net haben kann? Kurzfristig ist dies kein Problem, aber langfristig mit Sicherheitsverbesserungen usw. möchte ich nicht zu weit von der neuesten Version entfernt sein. Ich bin mir sicher, dass es viele andere in meinem Boot gibt, bei denen Sie eine Form der Kompatibilität mit dem vollständigen Framework benötigen.

Die Code-Sharing-Story über verschiedene .NET-Laufzeiten hinweg ist .NET Standard. Ihre Bibliotheken sollten versuchen, dies auf Code abzuzielen, der von .NET Core und .NET Framework gemeinsam genutzt wird.

Microsoft scheint die Bedeutung der Abwärtskompatibilität vergessen zu haben.

Das Problem ist, dass ASP.NET Core nie abwärtskompatibel sein sollte ... Deshalb gab es einen so großen Paradigmenwechsel von ASP.NET 4.x. Scheint so, als ob die Abwärtskompatibilität das wichtigste Bit für Sie wäre, ASP.NET 4.x auf .NET Framework zu verwenden. Das wird auf absehbare Zeit unterstützt und wird mit Sicherheitspatches versehen, solange Windows am Leben ist.

Auch wenn es nicht sein sollte , war 1.0 sehr abwärtskompatibel! Es unterstützte das gesamte riesige Erbe des Ökosystems, und wir schätzten es. Es schien damals, als müsste niemand seinen Kuchen verschenken oder auf den Verzehr verzichten.

@ Nick Craver

Es ist etwas größer als Razor-Seiten, das heißt, es gibt keinen Grund, sich zu bewegen. Es gibt einfach kein (aktuelles) Szenario, in dem beides existiert:

Können Sie das näher erläutern?

Tatsache ist, dass ASP.NET Core ohne das Ökosystem nicht wirklich nützlich ist. Einen Controller zu haben, der Text wiedergibt, ist großartig, aber für so viele Szenarien nicht nützlich.

Das geht auch ganz schnell 😉

Ich finde ASP.NET Core großartig. Ihr macht tolle Sachen. Ich hatte das Glück, bei einigen davon helfen zu können. Aber dieser Schalter zu diesem Zeitpunkt ist schlecht. Wenn all die Dinge, von denen wir glauben, dass sie portiert werden, tatsächlich in den 2.x-Zeitrahmen portiert werden, dann großartig. Nehmen Sie dann die Änderung in 3.x vor. Es ist schlecht, zu portieren, bevor eine Alternative fertig ist, und eine Frist festzulegen, wann die EOL-Lebenslinie beendet werden soll. Leuten zu sagen, sie sollten auf eine Wartungsversion -> EOL-Version portieren, ist schlecht.

Ich verstehe nicht, warum 2.x (Support) und 3.x (Drop) besser sind als 1.x (Support) und 2.x (Drop). Kannst du mir das bitte erklären? Wie macht das einen Unterschied?

Einige //BUILD 2017-Sitzungsempfehlungen für diejenigen, die sich Sorgen um die langfristige Unterstützung von ASP.NET-Varianten machen:

  • T6009 ASP.NET Web Forms-Updates

    • dh sie entwickeln immer noch vollständige .NET-Webplattformen

  • T6072 Unterstützung für ASP.NET Core: Was ist ein LTS?

    • Was ich vermute, wird gerade hektisch aktualisiert :grimacing:

@davidfowl :

Wie macht das einen Unterschied?

Weil Sie versprochen haben, dass einige der wichtigsten fehlenden APIs nach 2.0 ausgeliefert werden?

@yaakov-h

Weil Sie versprochen haben, dass einige der wichtigsten fehlenden APIs nach 2.0 ausgeliefert werden?

Sagen Sie mir, welche in ASP.NET Core?

@davidfowl System.DirectoryServices, System.Drawing wurden oben erwähnt.

Ehrliche Frage (das frage ich, nicht Microsoft): Bevorzugen Sie Stabilität und Kompatibilität gegenüber neuen Funktionen? Wenn ja, warum sollten Sie sich für ASP.NET Core entscheiden?

Ich denke, das ist eine sehr gute Frage. Wenn das vollständige .NET-Framework einem alles bietet, was man heute braucht, warum sollte man dann so scharf auf eine Migration zu einem komplett anderen Stack sein? Wenn .NET Core und ASP.NET Core anders benannt worden wären, ohne .NET im Namen, dann würden meiner Meinung nach viel weniger Leute über Migrationsprobleme streiten. Niemand beschwert sich darüber, dass er nicht auf einen schnelleren Go- oder Node.js-Webstack migrieren kann.

@davidfowl Abwärtskompatibilität mit ASP.NET MVC 5.x ist eine Sache, Abwärtskompatibilität mit .net Framework ist eine andere Sache. Das Löschen des .net-Frameworks ist eine große Sache ...

Ich verstehe nicht, warum 2.x (Support) und 3.x (Drop) besser sind als 1.x (Support) und 2.x (Drop).

Weil 2.x sehr bald kommt, wie wir verstehen.

@davidfowl System.DirectoryServices, System.Drawing wurden oben erwähnt.

Diese haben nichts mit ASP.NET Core 1.x oder 2.x zu tun und werden auf beiden ausgeführt, wenn sie online gehen.

Wie ich schon sagte, ich bin nur hier, um die FUD anzurufen, und das gehört dazu. Dieser Thread ist so groß geworden, dass niemand die Fakten in einigen der Antworten erkennen kann.

@FransBouma Sie (sollten) genau wissen, dass Microsoft über riesige Datenbanken mit Telemetrie, Feedback und anderen Daten darüber verfügt, was die Leute mit ihrer Technologie tun, die ein viel klareres Bild vermitteln als jede Anzahl von GitHub-Issues-Threads, und ich glaube nicht, dass meine Darauf hinzuweisen, war noch bissiger als

@markrendle Telemetrie ist keine Zauberei. Sie können nicht messen, warum Leute/Entwickler nicht wechseln oder warum sie auf einen anderen Stack umgestiegen sind, oder die Wichtigkeit ihres Projekts und wie sehr sie den Stack mögen (und anderen helfen, mit Beratung oder Oss) oder was sie tun.

Dieser Thread ist genau das, ein Feedback.

Ich verstehe nicht, warum 2.x (Support) und 3.x (Drop) besser sind als 1.x (Support) und 2.x (Drop). Kannst du mir das bitte erklären? Wie macht das einen Unterschied?

@davidfowl Zeit.
Zeit, sich ein wenig zu beruhigen. Zeit, Dinge zu bewerten. Zeit, eine Sache nach der anderen zu ändern. Zeit, netstandard2 -Pakete mit einem RTM-Ding zu verwenden. Zeit, unsere Bibliotheken auf netstandard2 (einfacher) statt auf netstandard1 (schwieriger) zu verschieben. Zeit, eine Sache nach der anderen zu ändern, für mich meistens.
Sie tun Aspnet, aber mein Produkt ist nicht nur Aspnet, es ist eine Kombination aus vielen Bibliotheken und Kompromissen und dem Ökosystem.

Weil 2.x sehr bald kommt, wie wir verstehen.

Was hat das damit zu tun? Was wäre, wenn 2.0 Ende des Jahres oder im Januar kommen würde? Würde es einen Unterschied machen? Was in 2.0 macht 1.x unwürdig?

@yaakov-h Sie wurden hier erwähnt, wo @shanselman sagte (Hervorhebung von mir)

AD – Insgesamt ist dies eine Lücke, wenn Sie LDAP direkt aufrufen möchten. Sie können sich sicherlich JETZT gegen Windows Auth authentifizieren. Wir planen, um den Sommer herum speziell den DirectoryServices-Namespace für Core 2.0 zu haben
Zeichnen – Das ist absolut eine Lücke. Wir planen, dies für Core 2.0 im Sommerzeitrahmen zu haben. Bis dahin existieren diese Netzstandard-Optionen auch ImageSharp, ImageResizer, Mono-Optionen usw

@davidfowl es geht nicht um die Version, sondern um das Datum und die Reife des .net-Kerns und seines Ökosystems.

@hikalkan

Es tut mir leid, ich verstehe das aus einem sehr hohen POV, aber nicht aus einem technischen. Vielleicht ist das keine technische Diskussion?

@Enricosada

Zeit, sich ein wenig zu beruhigen. Zeit, Dinge zu bewerten. Zeit, eine Sache nach der anderen zu ändern. Zeit, netstandard2-Pakete mit einem RTM-Ding zu verwenden. Zeit, unsere Bibliotheken auf netstandard2 (einfacher) statt auf netstandard1 (schwieriger) zu verschieben. Zeit, eine Sache nach der anderen zu ändern, für mich meistens.
Sie tun Aspnet, aber mein Produkt ist nicht nur Aspnet, es ist eine Kombination aus vielen Bibliotheken und Kompromissen und dem Ökosystem.

Warum unterscheidet sich das speziell von ASP.NET Core 2.0? Sie profitieren von diesem Vorteil der Plattform, unabhängig davon, was ASP.NET Core auswählt.

@markrendle besorge mir jemand einen Kalender, weil die Jahreszeiten ein ganzes Quartal umfassen (könnten 3 Monate von etwas anderem im selben Quartal entfernt sein) und für uns Menschen auf der Südhalbkugel besonders verwirrend sind.

@enricosada Sie können eine Menge nützlicher Informationen aus Telemetrie und anderen Datenquellen (Webanalysen, Suchdaten, direktes Kundenfeedback) erhalten. Weit mehr, als Sie von wütenden Mobs auf GitHub bekommen können (so berechtigt der Ärger jedes Einzelnen auch sein mag).

@yaakov-h Nun, die derzeit projizierte RTM für .NET Core 2.0 (und damit ASP.NET Core 2.0) ist das Kalenderquartal Q3, also Juli/August/September), und der Sommer auf der Nordhalbkugel ist hauptsächlich Juli/August/September , also ist es im Grunde dasselbe.

Sie können eine Menge nützlicher Informationen aus Telemetrie und anderen Datenquellen (Webanalysen, Suchdaten, direktes Kundenfeedback) erhalten.

Ich frage mich jedoch, wie zuverlässig diese Telemetrie – zumindest der automatisierte Teil – für Unternehmensbereitstellungen ist. (Denn von dort scheint der Großteil der Gegenreaktion zu kommen.)

Ich verstehe nicht, warum 2.x (Support) und 3.x (Drop) besser sind als 1.x (Support) und 2.x (Drop). Kannst du mir das bitte erklären? Wie macht das einen Unterschied?

@davidfowlZeit . Und eine ordentliche Ansage. Wenn die Botschaft klarer wäre, wären die Leute nicht so überrascht.

@davidfowlZeit . Und eine ordentliche Ansage. Wenn die Botschaft klarer wäre, wären die Leute nicht so überrascht.

Ich verstehe, aber ich glaube nicht, dass es einen Unterschied in Ihrer Fähigkeit machen würde, wirklich etwas zu portieren. Dieselbe EOL-Richtlinie existiert noch.

Ok, nachdem es mir schwer gefallen ist, dieses Problem zu verstehen, wollte ich einige Erkenntnisse für diejenigen bringen, die wie ich kämpfen und auch einige Fragen haben.

Wenn Sie also richtig verstanden haben, wird netstandard schließlich net framework ersetzen.

Nehmen wir also an, Netcore existiert nicht und Aspnet Core basiert auf Netstandard. Das bedeutet, dass Funktionen langsamer bereitgestellt werden.

Beispiel:
2017 asp.net will Feature A.
2018 netstandard implementiert Feature A. wir bekommen Feature A auf ns.

Was das Team sagt, ist, Netcore zu haben, das nicht auf Netstandard basiert, also:
2017 asp.net will Feature A
Das Aspnet-Team von 2017 implementiert Feature A. Asp.Net Core erhält Feature A auf Netcore.
2018 netstandard implementiert Feature A. wir bekommen Feature A auf ns.

Diese Entscheidung bringt also tatsächlich mehr "Flexibilität und Geschwindigkeit" in die Gleichung. Schnellere Veröffentlichung für diejenigen, die sie verwenden können, Feedback usw. Ich denke, es ist eine großartige Ergänzung zum langsamen Peace-of-Net-Framework. Das Feature wird wirklich ausgereift sein, wenn es NS erreicht.

Wenn Netcore auf Basis von Netstandard 2 zu haben bedeutet, dass Funktionen 1 Jahr (oder einen beliebigen Zeitrahmen) später veröffentlicht werden, werden die Leute immer noch argumentieren, dass sie dies wollen? Dies ist das Szenario, das wir von NET Framework gewohnt sind.

Dies ist ein Paradies für das Aspnet-Team, da es in der Lage ist, Sachen zu versenden, ohne von jemand anderem abhängig zu sein, und es sind auch großartige Neuigkeiten für Kunden, die diese Sachen schnell bekommen können. Wenn Sie mit den schnellen Sachen nicht weiterkommen, ist das Festhalten an der vorherigen Version ein vernünftiger Kompromiss (und eine Motivation für Sie/Abhängigkeiten, ein Upgrade durchzuführen).

Bibliotheksautoren sollten immer noch darauf abzielen, auf netstandard abzuzielen, und wenn Sie können, dann machen Sie sich überhaupt keine Sorgen.
Wenn Sie etwas brauchen, das nicht auf Netstandard ist (vielleicht Razor Pages (?)), dann müssen Sie auf Netcore abzielen, in Szenario 1 existieren Razor Pages möglicherweise nicht einmal. Ich verstehe nicht, wie das schlecht sein kann, ich würde sagen, es ist fair.

Die Frage ist also, welche Abhängigkeit Sie derzeit haben, die Sie davon abhält, NET Framework auf Net Core umzustellen?
Ich bin vielleicht der einzige hier, aber ich hätte nie erwartet, dass Aspnet Core für immer auf NET Framework funktioniert, es war mir klar, dass dies ein "Übergangsschritt" war. Meine gesamte Entwicklung, die derzeit NET Framework benötigt, ist splited . (und nein, das sind keine Microservices, es ist viel einfacher als das).

2.x-Unterstützung und 3.x-Drop unterscheiden sich nicht von 1.x-Unterstützung und 2.x-Drop. Ich werde hier raten und sagen, dass die Leute das Szenario nicht klar verstehen, also hoffe ich, dass dies zumindest einige klarstellt.

@NickCraver Sie sagten, Sie möchten, dass Microsoft diese Entscheidung rückgängig macht. Was wäre Ihr Vorschlag, keinen isolierten Netcore und langsamere Feature-Releases zu haben? (ehrliche Frage)

@davidfowl Ich denke, es gibt möglicherweise ein subtiles verstecktes Problem mit dem aktuellen Vorschlag, das Entwickler beunruhigt.
Wenn Sie Feature A für asp.net (mit Netcore) haben, können Sie vermarkten und versenden (und ein Kontrollkästchen für Management/PM aktivieren) und "faul" sein, um es auf Netstandard zu implementieren. Wenn ich mich nicht irre, ist dies das, was "Wetten" ist. auf unsicher wird hier verwiesen.
In meinem vorherigen Beispiel implementiert netstandard Feature A also möglicherweise 2019 oder 2020 oder nie anstelle von 2018. <-- das sieht nach einem möglichen Problem aus (?) habe ich recht? Kann sich Microsoft hier zu etwas verpflichten?

Obwohl wir uns alle darüber unterscheiden können, ob uns die Ankündigung gefällt, danke @davidfowl @DamianEdwards und @shanselman dafür, dass sie sich die Zeit für die Diskussion genommen haben. Es ist ein weiterer Beweis für gesteigertes Engagement und Offenheit.

Ich bin mir sicher, dass einige über das Timing usw. streiten werden, aber es ist ein Fortschritt.

Beispiel:
2017 asp.net will Feature A.
2018 netstandard implementiert Feature A. wir bekommen Feature A auf ns.

Was das Team sagt, ist, Netcore zu haben, das nicht auf Netstandard basiert, also:
2017 asp.net will Feature A
Das Aspnet-Team von 2017 implementiert Feature A. Asp.Net Core erhält Feature A auf Netcore.
2018 netstandard implementiert Feature A. wir bekommen Feature A auf ns.

Was sie hätten tun sollen, ist:
2017 Aspnet Team Builds Feature benötigt in lib X, das netstandard2.0 unterstützt. Auf diese Weise funktioniert aspnet auf allem, auf dem .netstandard ausgeführt wird, und Benutzer können es dann auf .net full ausführen, da lib X auch auf .NET full verwendbar ist (es ist nur eine Nuget-Installation entfernt).

Stattdessen tun sie dies nicht, sie zwingen lib X, nur .NET Core zu sein (ansonsten, warum dieser Thread/diese Entscheidung überhaupt). Wenn lib X so fortschrittlich ist, dass es CoreCLR-Funktionen benötigt, muss sich Microsoft fragen, warum diese erweiterten Funktionen nicht auf die vollständige .NET-CLR portiert werden.

Alles in allem fühlt es sich nach Politik an, wo MS einen schnelllebigen .NET-Core/Aspnet-Core benötigt, um Azure-Kunden einen Stack bereitzustellen, der in Azure-Containern verwendet werden kann, damit er mit JVM/NodeJS-basierten Containern auf AWS oder Google Cloud konkurriert. Aus ihrer Geschäftsperspektive kann ich das sogar verstehen. Aber es zeigt, dass MS bezüglich .NET full keine Priorität hat, um schneller voranzukommen, da es nicht genügend Ressourcen auf .NET full setzt, um mit .NET Core Schritt zu halten. Sehen Sie sich die Menge an APIs an, die in den letzten zwei Jahren vollständig zu .NET hinzugefügt wurden. Sagt Ihnen das, dass ein großes Team daran arbeitet?

Nein.

Microsoft verkauft ein großes Datenbanksystem, SQL Server Enterprise. Es kommt mit ausgefallenen Verschlüsselungsfunktionen. Wird auf .NET Core nicht unterstützt. Viel Spaß beim Verkauf von .NET Core 2.0 an Unternehmen, die potenzielle Kunden dieses teuren Datenbanksystems sind.

Vielleicht möchten Sie sich „schnell“ bewegen, aber wenn Sie das Ziel, auf das Sie sich bewegen, nicht vollständig verstehen, hilft es, sich ein oder zwei Minuten Zeit zu nehmen, um dies zuerst zu entscheiden.

Je mehr ich darüber nachdenke, desto mehr denke ich, dass das Problem, das die meisten Leute haben, darin besteht, dass sie das Gefühl haben, dass wir die Schnur zwischen .net und asp.net durchtrennen.
Derzeit haben wir asp.net, asp.net core (.net) und asp.net core (core). So konnte man wählen, ob man auf keinen, wenig oder vollen Kern gehen wollte.

Da die Versionierung schlecht kommuniziert wird, haben die Leute das Gefühl, dass nur der letzte Teil innovativ ist und weitergeht, während asp.net und asp.net core (.net) feststecken.
Da wir keine Möglichkeit haben zu validieren, ob eine Bibliothek in netstandard2.0 funktioniert, ohne es zu versuchen, wird es sehr riskant, mit vollem Kern in ein neues Projekt zu gehen. Sie landen also entweder bei asp.net (alt) oder asp.net core (ebenfalls alt).
Und da beide alt sind, ist es sinnvoll, einfach system.web und das alte asp.net zu verwenden. Da sie das wissen und asp.net Core sowieso EOL ist, warum sich die Mühe machen.

Am Ende haben wir also nur den Kern der mutigen Wahl, und der Rest geht mit dem alten, aber stabilen system.web. Und wir werden für immer in einem noch zerbrocheneren Ökosystem stecken bleiben.

PS: Ich formuliere das wie mit dem aktuellen Gefühl. Dieser asp.net-Kern 1.x ist "alt und veraltet" im Vergleich zu 2.x. Nicht, dass es eine Tatsache wäre, aber so denken die Leute.

@davidfowl

Wenn sich jede .NET-Plattform in ihrem eigenen Tempo bewegt, bedeutet die Verwendung des neuesten .NET-Standards, dass die langsameren Frameworks seltener Probleme bekommen.

Das passiert bereits, und wir sind damit einverstanden. Das Versionsdokument wird üblicherweise mit _vNext_ gefüllt. Und das ist in Ordnung. Anstatt zu warten, bis alle Plattformen gleich sind, bevor ich den Standard erhöhe, würde ich lieber sehen, wie der Standard ein paar Versionen im Voraus definiert wird, und beobachten, wie die Plattformen aufholen. Die Leute können sogar bei der Definition und Implementierung mithelfen. Und wenn ASP.NET Core den Standard für seine Releases anvisiert, wäre das Paket in dem Moment verfügbar, in dem eine Plattform und Architektur diesen neuen Standard implementiert. Neue Standardversionen könnten durch VS-Updates oder -Pakete eingeführt werden.

Die Art und Weise, wie es präsentiert wird, obwohl .NET Standard nicht so klingt, als wäre es eine von der Community geplante Anstrengung. Es ist eher eine Momentaufnahme der implementierten Verträge, die die Überprüfung bestanden haben. Und wenn große Projekte nicht darauf abzielen, wird es nicht annähernd so viel Planung für seine Veröffentlichungen geben.

Wir machen dasselbe

Oh gut. Geteiltes Elend ist bestes Elend. Csproj- und sln-Dateien mit dem Plattform-/Konfigurations-Zeug sind übrigens wirklich ärgerlich, weil die Build-Kombinationen nicht immer deklariert werden - sie werden abgeleitet. VS könnte also denken, dass ich mehr Build-Kombinationen habe, als tatsächlich vorhanden sind, weil es davon ausgeht, dass jede mögliche Kombination wichtig ist. Und ich muss zusätzliche Abschnitte in der Datei haben, die nicht benötigt würden, wenn ich nur die Plattform/Konfigurationskombinationen deklarieren könnte. Beispielsweise können Sie Funktionen wie Substring in den csproj PropertyGroup -Elementen verwenden, um benutzerdefinierte Eigenschaften zu vereinfachen, aber diese Bedingungen werden zum Bestimmen von Build-Konfigurationen verwendet, sodass Sie dort die vollständigen Zeichenfolgenwerte haben müssen. Diese Art von Sachen sollte nicht so viel Aufwand sein, wie es ist.

Ehrliche Frage (das frage ich, nicht Microsoft): Bevorzugen Sie Kompatibilität gegenüber neuen Funktionen? Wenn ja, warum sollten Sie sich für ASP.NET Core entscheiden?

Persönlich nein. Solange es eine Möglichkeit gibt, das zu tun, was ich tun muss, macht es mir nichts aus, den Code neu zu schreiben, solange es kein großes Unterfangen mit wenig Nutzen oder ein PITA zum Testen ist. Also würde ich das auswählen, was die meiste Dynamik und das größte Potenzial hat. Aber ich muss mit Projekten über mehrere Technologien hinweg arbeiten – Win32, COM, CORBA, ADO.NET, mehrere Reporting-Engines, verschiedene Web-APIs, eingebettete Browser wie CEF/Firefox/IE (natürlich ohne Edge, da es nicht unterstützt wird) und Mehrere herstellerspezifische Dinge, die ich vermeiden werde, zu beschämen. Ich implementiere, was ich kann, als Plugin, aber ich bin größtenteils mit dem kleinsten gemeinsamen Nenner der ausführbaren Hostdatei verheiratet. Der Umgang mit so vielen Technologien ist nervig, aber sie sind statisch. So ist eine Menge Desktop/Server-Zeug. Solange ich die Werkzeuge zum Interoperieren bekomme, kann ich damit auskommen. Aber je weniger veraltete Frameworks, an die ich mich erinnere, desto besser.

ASP.NET ist jedoch Teil des Webstacks, und der Webstack ist etwas, von dem ich glaube, dass es auf dem neuesten Stand bleiben muss. Es hat einen anderen Anwendungsfall, und es besteht die unglückliche Erwartung, die neuere Plattform für Webarbeiten zu verwenden, es sei denn, es gibt einen guten Grund dagegen oder eine signifikant inkompatible Codebasis. Ich versuche, dies auf dem neuesten Stand zu halten, da sich Webstandards schnell und erheblich ändern. Die meisten Leute, die mit dem Web Schritt halten, halten an neueren Technologien fest, und die Implementierung der neuen Dinge auf älteren Stacks kann ziemlich schmerzhaft sein. Besonders in der Situation, in der ASP.NET mit PHP und Node konkurriert, muss ich einen moderneren Stack beibehalten, um Talente und Interesse zu wecken. Ich würde gerne weniger Webarbeit machen, aber leider ist es die neue UI-Erwartung. Ich hatte gehofft, dass ich durch das Festhalten am Standard das Beste aus beiden Welten haben würde, aber das scheint ein zeitlich begrenztes Angebot zu sein.

Wenn Sie also richtig verstanden haben, wird netstandard schließlich net framework ersetzen.

Nicht das ist nicht richtig. Ich bin mir nicht sicher, wie Sie zu diesem Schluss gekommen sind. .NET Standard ist immer eine Teilmenge aller Laufzeiten, die es unterstützen.

Ich möchte hier ein paar verrückte Sachen rauswerfen, weil es ein paar Mal erwähnt wurde. Was ich gleich sagen werde, hat keinen Einfluss darauf, was passieren wird, es ist an dieser Stelle alles Spekulation. Mehrere Leute haben gefragt, warum wir auf .NET Core statt auf .NET Standard abzielen wollen.

  • Wir haben Zeichenfolgen als eines der wichtigsten Dinge identifiziert, die wir in .NET Core angehen möchten. Es gibt unzählige Ideen, aber eine davon ist, dass Zeichenfolge standardmäßig utf8 ist (jede Menge Kompatibilitätsprobleme, aber folgen Sie mir hier).
  • Eine andere Sache, die wir beheben möchten, ist die Möglichkeit, billige Segmente von Arrays/Strings, jedes Stück zusammenhängenden Speichers, zu nehmen. Wir haben Span<T> hinzugefügt und betrachten Buffer<T> , um dies darzustellen. Es könnte bedeuten, dass String und Array neue Schnittstellen implementieren, die es ermöglichen, einen Slice zu nehmen, der eine 0-Zuweisung erfordert.
  • Dies führt zu neuen Methoden für String, die eine Aufteilung ermöglichen, bei der nicht jedes Mal ein Array zugewiesen wird.
  • Dies führt zu Überladungen von Int, UInt usw. (TryParse), die Span<char> und Span<byte> verwenden.
  • Dies führt zu neuen Codierungsroutinen, die Span<byte> .
  • Buffer<T> und Span<T> können Sie Speicher auf einheitliche Weise darstellen, und wir möchten den Netzwerkstapel aktualisieren, um die Übergabe vorab festgelegter Puffer zu ermöglichen, die Span<T> oder Buffer<T> .
  • Kestrel wird HTTP2 im 2.x-Zeitrahmen implementieren (derzeit auf 2.1 ausgerichtet) und das erfordert neue APIs im SSL-Stream, um ALPN auszuführen (https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation).
  • Http-Client auf .NET Core unterstützt Duplex-Streaming, wodurch es möglich wird, Streaming-Endpunkte über http in Signalr über eine einzige HTTP-Anforderung ohne Websocket zu implementieren.
  • Wir haben die Header-Parser-Implementierungen von HttpClient und System.Net.Http gegabelt und umbenannt (https://github.com/aspnet/HttpAbstractions/tree/d1d9bceff56cb44a194ae36923ce687e5e353006/src/Microsoft.Net.Http.Headers), damit wir sie verbessern konnten und lassen Sie sie sowohl .NET Framework als auch .NET Core unterstützen. .NET Core hat eine Kopie dieser Verbesserungen, die es nicht zurück geschafft hat, weil sie nicht verbessert werden mussten (wir konnten sie nicht nutzen).
  • Es gibt eine Reihe neuer Threading-Primitive, die eine neue API erfordern, die neue Szenarien erhellen wird, wenn wir sie nutzen können (https://github.com/dotnet/corefx/issues?q=is%3Aopen+is%3Aissue+ author%3Adavidfowl+label%3Aarea-System.Threading), das sind nur einige der Dinge, die ich persönlich eingereicht habe.

Ohne die Fähigkeit, die Kernprimitiven auf Touren zu bringen, werden wir ermutigt, sie zu forken und Dinge zu erschaffen, die wie sie aussehen, es aber nicht sind. Aus diesem Grund haben wir unsere eigene kleine BCL in ASP.NET Core https://github.com/aspnet/Common/tree/dev/src/Microsoft.Extensions.Primitives.

Das war nur eine zufällige Auswahl von Dingen, die wir in naher Zukunft tun sehen und die sehr grundlegende Teile von .NET betreffen.

@FransBouma

NET voll, um schneller voranzukommen, da es nicht genügend Ressourcen für .NET voll bereitstellt, um mit .NET Core Schritt zu halten. Sehen Sie sich die Menge an APIs an, die in den letzten zwei Jahren vollständig zu .NET hinzugefügt wurden. Sagt Ihnen das, dass ein großes Team daran arbeitet?

Das stimmt einfach nicht. Dinge werden ständig auf .NET Framework portiert, aber wie wir alle wissen, ist das Risiko erheblich höher, als dieselben Änderungen in .NET Core vorzunehmen. Hassen Sie es nicht alle, wenn ein Update auf .NET Framework Ihre Anwendung beschädigt? Wir tun das auch, also erfinden wir alle Arten von Verfahren, um es zu mildern, Sie würden nicht glauben, welchen Würgegriff es auf die Technik ausübt, um es aufrechtzuerhalten. Wir schaffen es trotzdem, Features zu machen. Das heißt, es wird sich einfach nie so schnell bewegen wie .NET Core, es ist eine Windows-Komponente, die nach dem Windows-Zeitplan ausgeliefert wird.

Ich verstehe, aber ich glaube nicht, dass es einen Unterschied in Ihrer Fähigkeit machen würde, wirklich etwas zu portieren. Dieselbe EOL-Richtlinie existiert noch.

@davidfowl Richtig. Aber wie Sie es gestalten, bedeutet etwas. Ganz zu schweigen davon, wann es kommuniziert wird, wenn überhaupt. Es wird den Menschen nicht unbedingt mehr Zeit geben, die eigentliche Arbeit zu erledigen, aber es würde ihnen mehr Zeit geben, nachzudenken und die richtige Entscheidung (für sie) zu treffen.

Wenn Sie derzeit mit der Portierung zu/der Verwendung von ASP.NET Core auf .NET Framework begonnen haben, haben Sie anscheinend drei Möglichkeiten:

  1. Portieren Sie Ihren gesamten Code und Ihre Abhängigkeiten nach .NET Core und wechseln Sie zu ASP.NET Core 2.x.

    • Dies wäre die optimale Lösung, aber es könnte eine Menge Arbeit erfordern, und für einige könnte es aufgrund von Bibliotheken von Drittanbietern sogar außerhalb ihrer Kontrolle liegen.

  2. Bleiben Sie bei ASP.NET Core 1.x und .NET Framework und hoffen Sie, dass Sie 1. ausführen können, bevor es nicht mehr unterstützt wird.

    • Das ist ziemlich riskant. Innerhalb eines Jahres (oder zwei oder drei? wer weiß?) könnten Sie riskieren, auf einer nicht unterstützten Plattform zu laufen.

  3. Wechseln Sie zurück zu ASP.NET 4.x

    • Während diese Alternative Sie unterstützt, werden Sie "zurückgehen" und Arbeit rückgängig machen, die Sie bereits begonnen haben. Und seien wir ehrlich; Diese Plattform wird in Zukunft nicht mehr viel Liebe bekommen.

Wenn man es vorher gewusst hätte und einplanen könnte, halte ich sowohl 1. als auch 2. für gute Alternativen. Das Problem ist, dass beide Alternativen ziemlich viele Unbekannte haben. Was ist mit Bibliothek A? Was ist mit Bibliothek B? Wird Bibliothek A jemals portiert?

Ich glaube, im Moment fühlen sich viele Menschen gezwungen, eine Wahl zu treffen, ohne ein klares Bild davon zu haben, was die Wahl tatsächlich mit sich bringt.

@khellang (in deiner hypothetischen Lösung)

  1. Wechseln Sie zu ASP.NET Core 2.0 auf .NET Framework

    • Das ist ziemlich riskant. Innerhalb eines Jahres könnten Sie riskieren, auf einer nicht unterstützten Plattform zu laufen.

@davidfowl

Ehrliche Frage (das frage ich, nicht Microsoft): Bevorzugen Sie Stabilität und Kompatibilität gegenüber neuen Funktionen? Wenn ja, warum sollten Sie sich für ASP.NET Core entscheiden?

Ehrliche Antwort:
Favor: Stabilität und Kompatibilität stehen an erster Stelle. Neue Funktionen sind nett, aber wenn sie landen, dürfen sie einfach nicht das bestehende Ökosystem zerstören.
Warum ASP.NET Core: Ganz einfach, weil es auf OS X und Linux läuft.

Ein Ökosystem wie .NET (alt und/oder Core) oder auch Java wird von Unternehmen gewählt. Und wenn sie ihre Entscheidung treffen, investieren sie viel Mühe in die Entwicklung von Code für diese Plattform / dieses Ökosystem.

Nun hat zum Beispiel einer unserer Kunden bereits viel in ASP.NET Core investiert. Basierend auf den vorherigen Ankündigungen und verkauften Ideen von .NET Core wurde Code geschrieben. Dieser neue (ASP.)NET Core-Code, den wir (schmerzhaft) mit einem Team im Laufe der anfänglichen Entwicklung von (ASP.)NET Core geschrieben haben, beginnend mit seiner Einführung, besteht aus einer Reihe von Servern und Clientbibliotheken mit einer ganzen Menge der Geschäftslogik.
Und dieser Code läuft nicht nur auf einem Linux-Server und stellt Dienste bereit, sondern wird derzeit auch in einer Reihe sehr alter Anwendungen verwendet, die mit diesen Diensten kommunizieren, und diese sind eine verdammt gute Mischung aus WPF / Windows Forms / C++ / CLI und normal C++ (einschließlich DirectX-Sachen).

Und jetzt kürzen Sie unseren Kunden einfach die Investition einiger Mannjahre in den .NET Core-Code für die vorhandenen Anwendungen, da es unmöglich sein wird, den neuen .NET Core-Code in den eigentlichen Anwendungen wiederzuverwenden (Die neuen Server und Geschäftslogikbibliotheken wurden dafür erstellt).

Um auf die Frage zurückzukommen: Ein Unternehmen würde sich für .NET Core als „.NET, jetzt auch für XPlat“ entscheiden und dabei die gleiche Kompatibilität und Stabilität erwarten, die uns .NET in den letzten 17 Jahren gegeben hat. Und um ehrlich zu sein, das ist der einzige Grund für .NET Core. Wenn Sie das nicht wollten, würden Sie Node.js oder sogar Java verwenden. Beide sind jetzt viel ausgereifter und XPlat als .NET Core.

Und um es noch ein wenig näher auszuführen: .NET Core war in den frühen Phasen mit project.json und allem cool und schnelllebig. Und dann wurde uns aus Gründen der "Kompatibilität mit .NET" project.json zugunsten von Msbuild und .csproj wieder genommen. Und genau diese „Kompatibilität zu .NET“ wird nun auch noch weggenommen, zugunsten von … was genau?

@Ingwer

Erstmal super Antwort!

Warum ASP.NET Core: Ganz einfach, weil es auf OS X und Linux läuft.

Basierend darauf scheint es, als wäre MVC 5 auf Mono das, was Sie wirklich wollten, oder?

Um auf die Frage zurückzukommen: Ein Unternehmen würde sich für .NET Core als „.NET, jetzt auch für XPlat“ entscheiden und dabei die gleiche Kompatibilität und Stabilität erwarten, die uns .NET in den letzten 17 Jahren gegeben hat. Und um ehrlich zu sein, das ist der einzige Grund für .NET Core. Wenn Sie das nicht wollten, würden Sie Node.js oder sogar Java verwenden. Beide sind jetzt viel ausgereifter und XPlat als .NET Core.

Und um es noch ein wenig näher auszuführen: .NET Core war in den frühen Phasen mit project.json und allem cool und schnelllebig. Und dann wurde uns aus Gründen der "Kompatibilität mit .NET" project.json zugunsten von Msbuild und .csproj wieder genommen. Und genau diese „Kompatibilität zu .NET“ wird nun auch noch weggenommen, zugunsten von … was genau?

Dies ist im Grunde der Kern des Problems. Basierend auf Ihrer Einschätzung:

Diesen neuen (ASP.)NET Core-Code haben wir (schmerzhaft) mit einem Team im Laufe der anfänglichen Entwicklung von (ASP.)NET Core geschrieben.

Sie wollten wirklich nur das vorhandene .NET Framework unter Linux mit der guten alten ASP.NET 4.x-Kompatibilität. Ist das eine faire Zusammenfassung?

Favor: Stabilität und Kompatibilität stehen an erster Stelle. Neue Funktionen sind nett, aber wenn sie landen, dürfen sie einfach nicht das bestehende Ökosystem zerstören.

.NET Core ist tatsächlich eine stabilere Plattform als Desktop, da es eine parallele Ausführung ermöglicht, wo Desktop dies nicht tut.

Wenn Sie neuere Funktionen in der nächsten Version von Desktop verwenden möchten, müssen Sie den gesamten Computer auf diese neue Version aktualisieren, und das wirkt sich auf alles auf diesem Computer aus, nicht nur auf die App, die die neueren Funktionen verwenden möchte. Was in Ordnung ist, wenn Sie einen dedizierten Server für einen einzigen Zweck haben; aber nicht, wenn Sie viele Apps auf demselben Server ausführen, die mit unterschiedlichen Raten aktualisiert werden (oder überhaupt nie aktualisiert werden!)

@davidfowl schrieb:

Es liegt an den Frameworks zu entscheiden, ob sie auf .NET Framework, UWP, .NET Core, Mono usw. laufen wollen. Es ist eine Wahl. Orleans wird nicht mit .NET Core ausgeliefert. ASP.NET Core tut es. Diese Produkte sind ein und dasselbe.

Im Fall von Orleans unterstützen wir .NET Standard 1.5 in unseren „2.0 Technical Preview“-Builds, haben aber auf .NET Standard 2.0 gewartet, damit wir eine stabile Version erstellen können. Derzeit sehe ich keine Blockaden für uns - meine Sorge gilt nur der zukünftigen Divergenz. Irgendwann muss es aber zu dieser Abweichung kommen.

👍 Vielen Dank, dass Sie hier bleiben, um die Fragen aller zu beantworten, @davidfowl & co!

NET voll, um schneller voranzukommen, da es nicht genügend Ressourcen für .NET voll bereitstellt, um mit .NET Core Schritt zu halten. Sehen Sie sich die Menge an APIs an, die in den letzten zwei Jahren vollständig zu .NET hinzugefügt wurden. Sagt Ihnen das, dass ein großes Team daran arbeitet?

Das stimmt einfach nicht. Dinge werden ständig auf .NET Framework portiert, aber wie wir alle wissen, ist das Risiko erheblich höher, als dieselben Änderungen in .NET Core vorzunehmen. Hassen Sie es nicht alle, wenn ein Update auf .NET Framework Ihre Anwendung beschädigt? Wir tun das auch, also erfinden wir alle Arten von Verfahren, um es zu mildern, Sie würden nicht glauben, welchen Würgegriff es auf die Technik ausübt, um es aufrechtzuerhalten. Wir schaffen es trotzdem, Features zu machen. Das heißt, es wird sich einfach nie so schnell bewegen wie .NET Core, es ist eine Windows-Komponente, die nach dem Windows-Zeitplan ausgeliefert wird.

das ignoriert die Tatsache, dass Sie die Bibliotheken, von denen _Sie_ abhängen, als netstandard2.0-Pakete freigeben können, damit aspnet auch auf .net vollständig ausgeführt werden kann. Darüber hinaus ist das Vornehmen von Änderungen an .NET Full nicht ohne Risiko, aber lassen Sie es bitte nicht so klingen, als wäre es ein schrecklich organisierter Haufen von Code, bei dem eine Änderung alles zum Einsturz bringen kann.

Wir schaffen es trotzdem, Features zu machen.

Ja, jeder andere .NET-Entwickler auch ;) Sobald Sie etwas veröffentlichen, bleiben Sie bei dieser API hängen, wir alle haben das. Sie möchten jedoch eine Abkürzung nehmen (wie es das ASPNET-Team viele Male zuvor getan hat!) und sich ohne diese Belastung bewegen. Aber das wird am Ende nicht fliegen.

Das heißt, es wird sich einfach nie so schnell bewegen wie .NET Core, es ist eine Windows-Komponente, die nach dem Windows-Zeitplan ausgeliefert wird.

Ich denke, hier haben wir den Kern der Sache, oder? Das .NET-Kernteam kann tun, was es will, ohne mit dem Ungetüm „WinDiv“ zu kommunizieren. Warum löst Microsoft diesen internen Politik-Mist nicht intern und stellt sicher, dass .NET full + .NET Core ohne die Windows-Politik korrekt versioniert / bewegt werden?

Übrigens, immer noch daran interessiert, wie Sie die Verschlüsselungs-API von SQL Server Enterprise an .NET Core 2.0-Benutzer verkaufen würden.

Außerdem muss ich hinzufügen; Ich bin ziemlich beeindruckt, wie lange dieser Thread schon läuft, mit so vielen Beteiligten, und dabei immer noch höflich bleibt ❤️ Das sieht man nicht jeden Tag im Internetz 👏 Vielleicht wächst das .NET OSS-Ökosystem doch noch heran? 😉

das ignoriert die Tatsache, dass Sie die Bibliotheken, von denen Sie abhängen, als netstandard2.0-Pakete freigeben können, damit aspnet auch auf .net vollständig ausgeführt werden kann.

Darüber hinaus ist das Vornehmen von Änderungen an .NET Full nicht ohne Risiko, aber lassen Sie es bitte nicht so klingen, als wäre es ein schrecklich organisierter Haufen von Code, bei dem eine Änderung alles zum Einsturz bringen kann.

Es ist groß und existiert schon lange. Wie bei jedem Legacy-System sind einige Teile besser als andere. Es macht den Code nicht weniger zuverlässig, aber es macht es praktisch unmöglich, einige Teile zu ändern. Es gibt so viele lustige Geschichten, die Veteranen Ihnen erzählen können, wie Fehlerkorrekturen in einem Bereich obskure Szenarien in Anwendungen in anderen Teilen zerstörten. Es ist verworren, das passiert, wenn die Abhängigkeitsgrenzen nicht gut definiert sind. Sie müssen mir nicht einmal glauben, gehen Sie einfach und stöbern Sie auf referencesource.microsoft.com. In-Place-Updates sind der Grund, warum wir einen Konfigurationsschalter für jede einzelne potenziell bahnbrechende Änderung an .NET Framework hinzufügen müssen. Es ist Physik, es kann sich einfach nicht so schnell bewegen.

Ja, jeder andere .NET-Entwickler auch ;) Sobald Sie etwas veröffentlichen, bleiben Sie bei dieser API hängen, wir alle haben das. Sie möchten jedoch eine Abkürzung nehmen (wie es das ASPNET-Team viele Male zuvor getan hat!) und sich ohne diese Belastung bewegen. Aber das wird am Ende nicht fliegen.

Wir lieben Abkürzungen! Entwickler sind faul 😄 . Wir möchten auch unseren .NET Core wirklich verbessern, ohne das zu stören, was .NET Framework darstellt. Vielleicht hätten wir es in etwas anderes umbenennen sollen, wie Sparkle 😄 .

Ich denke, hier haben wir den Kern der Sache, oder? Das .NET-Kernteam kann tun, was es will, ohne mit dem Ungetüm „WinDiv“ zu kommunizieren. Warum löst Microsoft diesen internen Politik-Mist nicht intern und stellt sicher, dass .NET full + .NET Core ohne die Windows-Politik korrekt versioniert / bewegt werden?

Lesen Sie meine andere Antwort zur Physik.

Übrigens, immer noch daran interessiert, wie Sie die Verschlüsselungs-API von SQL Server Enterprise an .NET Core 2.0-Benutzer verkaufen würden.

Das ist nicht mein Fachgebiet, das lasse ich jemand anderen beantworten.

@khellang lol das liegt daran, dass GitHub-Probleme MS-hassende Trolle noch nicht angezogen haben. Derzeit ist Twitter ihr Medium dafür, wo es noch kein Downvote gibt :)

@davidfowl

Sie wollten wirklich nur das vorhandene .NET Framework unter Linux mit der guten alten ASP.NET 4.x-Kompatibilität. Ist das eine faire Zusammenfassung?

Nein nicht wirklich. Unser Kunde benötigte komplett neue / glänzende (Mikro-)Dienste, um seine bestehenden .NET 4.x (sie waren 3.5, als wir anfingen) Windows-Desktopanwendungen zu ergänzen.

Als Sie mit all dem glänzenden Core-Zeug in die Beta-Phase gingen, haben wir begonnen, den neuen Servercode für das brandneue MVC auf ASP.NET Core zusammen mit begleitendem DTO, Geschäftslogik und Client-Bibliotheken zu schreiben, die ebenfalls vorhanden sind parallel in den bestehenden 4.6-Desktop-Anwendungen verwendet, um mit den brandneuen Servern zu kommunizieren.

Außerdem laufen einige der brandneuen ASP.NET Core-Server nicht nur unter Linux, sondern auch als Windows-Dienste mit Topshelf (zusätzlich zum vollständigen 4.6-Framework).

Die Sache ist also, dass viel investiert wurde, und jetzt scheinen wir bei .NET Core 1 festzustecken, da ein Wechsel zu 2 (und der Verlust von netstandard) auch bedeuten würde, dass wir die Assemblys in nicht wiederverwenden können vorhandene Desktop-Anwendung (für die die Dienste und zugehörigen Bibliotheken erstellt wurden) nicht mehr.

Das Wichtigste für uns wäre also, die neuen (ASP).NET Core-Bibliotheken, die wir in .NET 4.6-Desktopanwendungen schreiben, weiterhin verwenden zu können (denn dafür wurden sie entwickelt), während wir in der Lage sind, auf einem unterstützten System zu bleiben .NET Core-Version, solange die Desktop-.NET-Version unterstützt wird, auf der der Code ausgeführt werden kann.

Solange also .NET Core 1. genauso unterstützt wird wie .NET 4.6 und es einen linearen Upgrade-Pfad auf .NET Core x gibt, wenn .NET 5 herauskommt, und .NET Core x-Code auf .NET ausgeführt werden kann. NET 5, dann geht es uns gut.

@gingters Verwenden Sie .net-Funktionen, die nicht in netstandard2.0 enthalten sind, für die asp.net-Dienste?

Wenn nicht, sollten die Bibliotheken einfach funktionieren. Aber ich vermute, Sie sprechen über Dinge, die nicht in netstandard2.0 enthalten sind.

@davidfowl Funktionieren c++/cli-DLLs auf netcoreapp 2.0? Wir haben alte C++/CLI-Assemblys von Drittanbietern, die nicht früher ersetzt werden.

@davidfowl schrieb:

ASP.NET Core 2.0 hat ehrlich gesagt nicht so viele neue Features

In welchem ​​Fall, warum diese hochgradig disruptive Änderung jetzt?

@qrli C++/CLI funktioniert nicht auf CoreCLR. Hier sind einige Hintergrundinformationen, warum es nicht unterstützt wird: https://github.com/dotnet/coreclr/issues/659#issuecomment -91341753

Geben Sie 1x 4 Jahre Support (portieren Sie so viel wie möglich von 2x) und machen Sie mit 2x schnell weiter. Ein Stadtflitzer für den langsamen Stadtverkehr und ein Ferrari für die Autobahn. Wir haben viel Konkurrenz außerhalb der .net-Welt.
Wenn ASP.Net Core erfolgreich ist, bin ich sicher, dass MS die Ressourcen bereitstellen wird, um 1x für 4 Jahre zu unterstützen. Meistens ändert sich die Kultur.

@ idg10 Es ist wirklich nicht. 2.x ist so ziemlich 1.x mit Performance-Sachen, die nur im Kern verfügbar sind. Ich denke, das einzige Hauptmerkmal sind Razor Pages.

Auf Version 1.x zu sein bedeutet also nicht, dass Sie auf einer veralteten Version sind. Aber das wurde nicht sehr gut kommuniziert.

In welchem ​​Fall, warum diese hochgradig disruptive Änderung jetzt?

Ich denke, das fasst es ziemlich genau zusammen https://github.com/aspnet/Home/issues/2022#issuecomment -300141134

@hallatore
Ich weiß, dass es funktioniert, wie es _jetzt_ tut. Wir können vorerst bei 1 bleiben. Das Problem geht voran. Wenn wir ein Upgrade auf (ASP).NET Core 2-Bibliotheken durchführen möchten (oder schlimmer noch: müssen) (dh wenn 1 außer Betrieb geht und eine kritische Sicherheitslücke behoben wird), stehen wir vor dem Problem, dass wir kein Upgrade durchführen können würde es unmöglich machen, unsere Bibliotheken zu verwenden, die die aktualisierten Pakete in den .NET-Desktop-Apps benötigen.

Bearbeiten / hinzufügen: Es sei denn, es wird ein neues vollständiges .NET-Framework geben, das in der Lage ist, die neuen, festen .NET Core-Bibliotheken auszuführen, die sich auf einem linearen Upgrade-Pfad für die vorhandene Legacy-Desktop-App befinden.

@gingters Ich bin mir nicht sicher, ob ich es verstehe.

Wenn Ihre Desktop-Bibliotheken mit netstandard2.0 funktionieren, sollten sie auch auf dem Kern laufen. (Wenn sie WPF-Sachen usw. aufrufen, werden sie das natürlich nicht tun)
Wenn dies der Fall ist, sollten Sie asp.net Core 2.0 verwenden können.

Wenn Ihre Desktop-Bibliotheken auf dem Kern abstürzen, weil sie Dinge verwenden, die nicht in netstandard2.0. Dann sehe ich, warum Sie auf 1.x bleiben müssen. Und ich verstehe, warum das kurze EOL ein Problem ist.

Wäre 1.x eine einfachere/bessere Wahl, wenn Sie wüssten, dass 2.x nur Kernleistungsmaterial enthält (was bedeutet, dass 1.x nicht veraltet ist gegenüber 2.x). Und dass 1.x Patches bekommt und für * Jahre unterstützt wird?

@hallatore Es ist umgekehrt. Alte Anwendung: Mix aus Windows Forms, WPF, C++/CLI, normalem C++, DirectX, Millionen Codezeilen etc. pp, läuft auf 4.6 full framework.

Auf .NET Core: Neue Geschäftslogikbibliotheken (die auch andere Bibliotheken verwenden, dh die .NET Core-Version von Serilog), Abstraktionsbibliotheken + Dienste + Clientbibliotheken für diese Dienste. Dienste müssen unter Linux und als Windows-Dienste ausgeführt werden (derzeit Topshelf auf dem vollständigen .NET 4.6-Framework, sobald die Unterstützung von Windows-Diensten in Core landet, könnte dies jedoch geändert werden).

Jetzt werden die neue Geschäftslogik und Abstraktionen sowie die Service-Client-Bibliotheken auch von den .NET 4.6-Anwendungen verwendet. Das bedeutet, dass wir nicht in der Lage sind, sie zu aktualisieren, da sie auf dem vollständigen .net-Framework laufen müssen, solange die Desktop-App dies tut (was wir davon ausgehen können, dass dies so lange dauern wird, wie ein Desktop leben kann, es sei denn, das vollständige Framework geht im Allgemeinen weg).

@gingters Sie können weiterhin die gemeinsam genutzten Bibliotheksprojekte in Ihrer Lösung haben, die auf netstandard _min(usable)_ abzielen, und diese Bibliotheken aus Ihrem ASP.NET Core 2.0-Code nutzen sowie sie für die Verwendung von WPF, Xamarin, UWP usw. packen.

Es ist wirklich traurig, dass ihr MS-Jungs immer noch nicht versteht, worauf es ankommt. Sie denken immer noch, dass es sich nur um ein Problem mit der API-Lücke handelt. Sie denken immer noch, dass die Leute ihren Code einfach ändern können und es auf Netcoreapp funktioniert ... Ich dachte, Sie verstehen Unternehmen viel besser als Google.

Basierend darauf scheint es, als wäre MVC 5 auf Mono das, was Sie wirklich wollten, oder?

@davidfowl Ich meine, komm schon. Das ist eine abweisende und ehrlich gesagt beleidigende Antwort. Kann irgendjemand bei MS bestätigen, dass ein einzelner Entwickler überhaupt noch Framework ASP zugewiesen ist? Ich versuche hier nicht, ein Idiot zu sein, aber es scheint, als würde die Community manchmal schlecht behandelt.

Es gibt keinen Grund unter der Sonne, dass ich .Net Core und ASP.Net Core als dasselbe Produkt betrachten sollte. Es gab überhaupt keine Nachrichten, die dies unterstützten. Vor allem, wenn man bedenkt, dass Mono _nach_ der Ankündigung von .Net Core unter die Fittiche von Microsoft kam. Es wurde immer als die kleinere, flinkere xplat-Version von .Net gemeldet. Nicht nur das, wir erinnern uns alle an die Tage, als ASP.Net Core eigentlich ASP.Net 5 war und überall funktionieren sollte. Verdammt, diese Änderung ist erst etwas mehr als anderthalb Jahre her.

Ist die selbst gehostete HTTP-Story in netstandard20 effektiv „Kestrel 1.x verwenden“? Ich bin mir nicht sicher, ob die Nancy-Leute sich sehr darum kümmern werden, und ich auch nicht. ASP.Net 2.x mag in Bezug auf die Funktionen inkrementell sein, aber Kestrel 2 hat einen ernsthaften Leistungsvorteil, den wir an dem Tag ernsthaft nutzen könnten kommt heraus.

@davidfowl

Es ist groß und existiert schon lange. Wie bei jedem Legacy-System sind einige Teile besser als andere. Es macht den Code nicht weniger zuverlässig, aber es macht es praktisch unmöglich, einige Teile zu ändern. Es gibt so viele lustige Geschichten, die Veteranen Ihnen erzählen können, wie Fehlerkorrekturen in einem Bereich obskure Szenarien in Anwendungen in anderen Teilen zerstörten. Es ist verworren, das passiert, wenn die Abhängigkeitsgrenzen nicht gut definiert sind.

Ich denke, das ist ein interessanter Kommentar. Ich erinnere mich, dass ich eine ältere Aufzeichnung einer NDC-Konferenzsitzung gesehen habe, bei der @davidfowl und @DamianEdwards den alten Cruft in ASP.NET 4 auseinander genommen haben, den Sie wirklich hinter sich lassen wollten – es war wirklich faszinierend, einen Blick in diese schwarze Codebox zu werfen.

Aber ich denke, dieser Kommentar spiegelt auch die Bedenken wider, die viele von uns mit unseren eigenen Codebasen haben. Wir unterhalten große Legacy-Systeme, die oft nicht gut konzipiert sind und schlechte Abhängigkeitsgrenzen aufweisen. Es ist praktisch unmöglich, einige dieser Systeme für .NET Core umzuschreiben. Das Geschäft lässt das Risiko einer so großen Veränderung einfach nicht zu.

Ich weiß nicht, was die richtige Antwort ist. Aber ich weiß, dass wir für unsere eigenen Anwendungen auf absehbare Zeit das vollständige Framework und ASP.NET4/MVC5 verwenden werden (wir haben immer noch einen Teil der WebForms, die für eine ganze Weile nicht neu geschrieben werden!). Ich hoffe, dass MVC5 jetzt, da es _endlich_ auf GitHub verschoben wurde, etwas Liebe bekommt – ich bin sogar bereit, meine eigene Zeit und Mühe zu investieren, um es besser zu machen (z. B. bessere asynchrone Unterstützung, Leistungsverbesserungen usw.).

@qrli Enterprises verfügen weiterhin über vollständiges .NET 4.5 zur Ausführung auf ihren Windows Server 2008 R2 IIS 7.5-Webfarmen. Das nimmt ihnen keiner weg.

@mattnischan

Ist die selbst gehostete HTTP-Story in netstandard20 effektiv „Kestrel 1.x verwenden“? Ich bin mir nicht sicher, ob die Nancy-Leute sich sehr darum kümmern werden, und ich auch nicht.

HttpListener ist Teil von netstandard20, daher wird auch netcore20 an dieser Front nichts weggenommen, wenn man netcore20 wird.

HttpListener ist Teil von netstandard20 also auch netcore20.

Und ich nehme an, ich kann die gleichen Anfragen pro Sekunde von HttpListener erwarten?

@markrendle Stimmt. Zur Zeit.

Aber was würden Sie vorschlagen, wenn eine andere Bibliothek, die von unserem gemeinsamen Material verwendet wird (z. B. serilog, newtonsoft, autofac usw.), die Unterstützung für netstandard_min (usable) einstellt (vielleicht nur, weil sie der Meinung ist, dass es zu viel Aufwand ist, beide Welten zu unterstützen) und Es wurde ein kritisches Sicherheitsproblem in der neuesten Version entdeckt, die immer noch das vollständige Framework unterstützt?

@mattnischan

HttpListener ist Teil von netstandard20 also auch netcore20.

Und ich nehme an, ich kann die gleichen Anfragen pro Sekunde von HttpListener erwarten?

Ok, Nancy ist .NETStandard 1.6, also können Sie es auf Core 2.0 und Kestrel 2.0 verwenden. Besser?

@gingters Ich würde vorschlagen, diese Brücke zu überqueren, wenn Sie dazu kommen.

Lassen Sie sich niemals von der Zukunft stören. Sie werden ihm notfalls mit denselben Waffen der Vernunft begegnen, die Sie heute gegen die Gegenwart wappnen.
_~ Marcus Aurelius_

Das ist kein so nützliches Mantra, wenn Software ausgeliefert wird, die kein Wartungsbudget hat und über Jahre weitgehend unverändert verwendet werden muss.

Wenn es für die kommenden Jahre weitgehend unverändert bleiben muss, warum spielt es dann eine Rolle, was mit den Bibliotheken passiert, von denen es in diesen kommenden Jahren abhängig ist?

@markrendle Angenommen , Sie sind gesetzlich verpflichtet (zumindest in einigen Ländern), Notfallprotokolle für genau diese Fälle bereitzustellen, bevor eine Version der Anwendung ausgeliefert wird, da sie in Umgebungen verwendet werden könnte, in denen das Leben von Menschen auf dem Spiel stehen könnte .

Sie möchten also einen Webserver, der so schnell wie Kestrel ist, und Ihre einzige spezifische Anforderung ist, dass es nicht Kestrel ist?

Ok, Nancy ist .NETStandard 1.6, also können Sie es auf Core 2.0 und Kestrel 2.0 verwenden. Besser?

@markrendle @benaadams Nein, ich glaube, Sie missverstehen das, und wieder versuchen Sie nicht, ein Idiot zu sein, sondern weisen nur darauf hin, dass es andere Kunden von Teilen von ASP.Net Core gibt, die nicht das Ganze sind. Ich würde unsere Produktionsplattform nur gerne auf Kestrel 2.0 hosten, wenn es herauskommt, und unsere Produktionsplattform könnte für eine Weile auf Framework laufen. Ich kann netcoreapp20 nicht anvisieren.

Nancy mag netstandard16 sein, aber das spielt keine Rolle, da ich Kestrel 2.0 nur auf Core 2.0 verwenden kann. Mir ist klar, dass dies spezifisch ist, und vielleicht lautet die Antwort wirklich: "Dann schreiben Sie Ihren eigenen Webserver, der auf einem Framework funktioniert, das so schnell ist wie Kestrel 2. Kestrel ist nur für ASP.Net." Aber ich würde es hassen, wenn das die Botschaft wäre.

@gingters @gulbanana Ich verstehe nicht, wie eine ausgelieferte Anwendung mit einem festen Satz von Abhängigkeiten kaputt gehen wird, weil ein Open-Source-Projekt zu einem mutmaßlichen zukünftigen Zeitpunkt keine beliebige Version des zugrunde liegenden Frameworks mehr unterstützt.

@mattnischan Ja, ich habe herausgefunden, was du meinst und diesen Kommentar gelöscht :)

@stefanson

Da ich Code zwischen dem Server und meinen Desktopanwendungen freigeben muss, bedeutet das, dass ich nie die neueste Version von ASP.Net haben kann?

Wenn Sie Ihre Bibliotheken auf .NET Standard ausrichten, können Sie sie sowohl in Desktop als auch in Core verwenden. Für Bibliotheken, die auf .NET Standard abzielen, haben Sie Unterstützung für universelle Plattformen: Desktop, Core, Mono, Unity, UWP, Tizen usw

Eine ASP.NET-Anwendung ist eine ausführbare Datei; der Endpunkt, es ist keine Bibliothek. Die endgültige Ausgabe, die ASP.NET-Anwendung/ausführbare Datei, muss auf einer Plattform ausgeführt werden. Irgendwann werden alle ihre Plattformbibliotheken von der ASP.NET-Anwendung verwendet, sodass es keinen Vorteil gibt, wenn sie nicht dasselbe Ziel wie die Plattform sind.

.NET Core ist eine gute Plattform, da sie eine breite plattformübergreifende Abdeckung bietet; kann Seite an Seite mit Desktop installiert und App für App unabhängig aktualisiert werden; anstatt ganze Maschine und jede App.

Einige Gegenstände werden außerhalb verwendet; Daher verwendet Wyam Razor für die Generierung statischer Websites. Razor ist derzeit .NET Standard 1.3, sodass die Verwendung außerhalb von Core derzeit kein Problem darstellt.

Es gibt einige Randfälle, die oben erwähnt wurden:

Verwendung von Bibliotheken, die den Funktionsumfang von .NET Standard 2.0 nicht unterstützen. Viele von ihnen sind hoffentlich Lücken, die geschlossen werden können – und zu Beginn dieser Ausgabe fragte MS, was diese Lücken seien, damit sie sie priorisieren könnten.

Ausführen einer WebApp, die beispielsweise in eine UWP-App eingebettet ist; Wenn Desktop jedoch weiterhin unterstützt, aber auf Version 4.7.1 geändert wurde, befinden Sie sich immer noch in der gleichen Situation, da UWP derzeit 4.7.1 nicht unterstützt und zu dem Zeitpunkt, als dies der Fall war, ASP.NET 4.7.2 und dann 4.7 erfordern würde. 3 usw. Es wäre eine Sisyphusaufgabe, da die anderen Plattformen es niemals verstehen würden; also wäre es nur fleißige arbeit ohne viel sinn?

Ja, ich habe herausgefunden, was du meinst, und diesen Kommentar gelöscht :)

Keine Sorge, guter Herr. 👍

@davidfowl

Wie wirkt sich das Revving von ASP.NET Core-Versionen darauf aus? Wenn wir die .NET Framework-Unterstützung in 3.0 einstellen würden (wie sich die Leute in diesem Thread zu entziehen scheinen), würden Sie sich dann nicht trotzdem in derselben Sackgasse befinden? Sie würden Ihre ASP.NET Core 2.0-Anwendung portiert und ein Jahr lang auf Framework ausführen lassen, und wenn 3.0 herauskommt, könnten Sie kein Upgrade durchführen. Sie könnten dies sowieso mit ASP.NET Core 1.1.x tun, das auf .NET Framework ausgeführt wird und auch dann unterstützt wird, wenn ASP.NET Core 2.0 nicht verfügbar ist.

Nur zu sagen (so wie ich es verstehe), dass "wir irgendwann mit dem vollständigen .net brechen mussten, warum nicht jetzt", fehlt ein wichtiger Punkt. Ich bin mir sicher, dass viele Leute auf die Veröffentlichung von Core 2.0 gewartet haben. Weil es öffentlich viele Verbesserungen in der Kompatibilität mit dem vollständigen .net versprochen hat. So viele Bibliotheksautoren warten auch darauf, mit der Migration zum Core zu beginnen. Ich schätze also, dass wir nach der Veröffentlichung von Core 2.0 viel mehr Bibliotheken auf Core migrieren werden. Und so wäre die Bindung von asp.net Core an Core 3.0 für das Ökosystem viel weniger frustrierend als jetzt. Denn im Moment von 3.0 sollten diese Dinge weniger daran hindern, auf den Kern zu migrieren.
Im Moment ist es eine Katastrophe.

Zuvor habe ich den Beginn der Migration unseres Frameworks (sehr ähnlich zu dem, was @benaadams beschrieben hat) auf core/asp.net Core in zwei Schritten bewertet: Webpart (das sich jetzt auf mvc/webapi befindet) auf asp.net Core migrieren und voll halten .net und migrieren Sie dann alle anderen Dinge auf den Kern, wenn alle Abhängigkeiten entsprechende Implementierungen für den Kern haben. Was uns derzeit blockiert, sind der Oracle ADO-Anbieter und der Postgres ADO-Anbieter (es könnte andere Inkompatibilitäten in Corefx geben, die wir noch nicht untersucht haben). Jetzt ist dieser Plan tot. Also müssen wir sitzen und auf die Migration von Abhängigkeiten warten, wobei wir alle neuen Dinge in der Core-Welt aufgeben. Und das alles nur, weil jemand bei MS entschieden hat, dass wir eine „Moving Fast“-Plattform brauchen.

@markrendle Die Anwendung wird nicht nur deswegen kaputt gehen. Das Problem ist ein anderes:
Da .NET Core 2 die Unterstützung für das vollständige Framework eingestellt hat (wo es in Version 1 gut lief, und es von Microsoft ist, wo Sie nicht erwarten, dass ein so grundlegendes, elementares Feature beim Aktualisieren auf eine neue Version gelöscht wird), auch Ihre Abhängigkeiten könnten die Unterstützung für dieses Szenario eher früher als später einstellen.
Jemand findet ein kritisches Sicherheitsproblem in einer der verwendeten Bibliotheken und es wird kein Update für die Version herausgegeben, auf der Sie festsitzen, da neuere Versionen Ihre Laufzeitumgebung nicht mehr unterstützen. Da Ihre Anwendung jetzt in einer stark regulierten Umgebung verwendet wird, müssen Sie einen Notfallplan bereitstellen, der erklärt, was genau Sie tun werden, wenn ein kritisches Sicherheitsproblem erkannt wird, und wie Sie diesen Fix einführen, um zu verhindern, dass Menschen verletzt oder schlimmer werden. Ein "Nun, wir können nichts tun" führt zum Widerruf Ihrer Erlaubnis, diesen Antrag zu versenden.

@gingters Sehen Sie, der Punkt ist, dass Sie Ihre technischen Entscheidungen auf der Grundlage der derzeit verfügbaren Informationen und der Art des Marktes treffen müssen, auf dem Ihr Unternehmen tätig ist. Sie können beim besten Willen nicht für alle Eventualitäten Rechenschaft ablegen, so sehr die Bürokraten und Regulierer dieser Welt Ihnen das auch vorgaukeln möchten. Was, wenn Microsoft durch eine feindliche Übernahme von Apple aufgekauft wird und .NET vollständig zugunsten von Swift eingestellt wird? Was ist, wenn starke Verschlüsselung in einem der Länder, in die Sie verkaufen, für illegal erklärt wird und alle Software-Stacks, die SHA256 enthalten, verboten sind? Was, wenn Nicolas oder James oder _insert-name-of-Autofac-maintainer-hier_ beschließen, zum Mars zu ziehen und Feuchtigkeitsfarmer zu werden? Was, wenn sich die Magnetpole umkehren und jedes einzelne Bit der digital aufgezeichneten Daten gelöscht wird?

Als eigentliche Antwort auf die Frage, was Sie als Unternehmen tun werden, wenn beispielsweise in JSON.NET ein kritisches Sicherheitsproblem gefunden wird, ohne dass ein offizielles Update verfügbar ist, das einzige Die mögliche Antwort lautet "We will fork-and-patch JSON.NET", was meiner Meinung nach bereits die Antwort auf die Frage ist, was Sie tun würden, wenn James Newton-King aus irgendeinem Grund krank werden würde. In meiner früheren Erfahrung in dieser Art von Märkten gab es Hinterlegungsvereinbarungen für den Quellcode zu proprietären Paketen für diese Art von Eventualitäten; Was mit Open-Source-Paketen zu tun ist, ist im Vergleich dazu trivial.

Und das alles nur, weil jemand bei MS entschieden hat, dass wir eine „Moving Fast“-Plattform brauchen.

„schnell vorankommen“ ist vielleicht übertrieben; Nach dem vorherigen Veröffentlichungszeitplan von Full Framework könnte es besser als "ohne zusätzliche Verzögerung von 1 - 2 Jahren" beim Versand angegeben werden. Das ist eine verrückte Zeit in der Web-Welt.

Die Dinge ändern sich schnell und die Plattform muss relevant bleiben.

@davidfowl und @DamianEdwards Ich denke, dass diese ganze Verwirrung von der Tatsache herrührt, dass ASP.NET Core 1.x auf .NET Framework ausgeführt werden kann. Dies führte zu der Annahme, dass ASP.NET Core die Weiterentwicklung von ASP.NET 4/MVC5 war; Menschen dazu bringen, darauf umzusteigen und zu glauben, dass sie alle Vorteile (Geschwindigkeit und neue Funktionen) erhalten und gleichzeitig die Abwärtskompatibilität beibehalten würden.

Vielleicht besteht die langfristige / dauerhafte Antwort auf dieses Problem darin , ASP.NET 4/MVC5 erneut als Antwort für Leute zu bewerben, die Abwärtskompatibilität mit langfristiger Unterstützung suchen (und vielleicht auch anbieten, kleine Verbesserungen vorzunehmen).

Dann kann sich ASP.NET Core darauf konzentrieren, eine neue Plattform zu sein, die sich von der Vergangenheit löst, um enorme Vorteile für diejenigen zu bieten, die den Sprung schaffen können.

Vor diesem Hintergrund werden (ASP).NET (Framework) und (ASP).NET Core zwei parallele und gleichermaßen gültige Wege sein, die Kunden wählen können. Und ich denke, so hätte es von Anfang an sein sollen.

@markrendle Ja, das ist hypothetisch, aber Bürokratie ist leider eine reale Sache. Und ja, Sie können (und müssen) nicht alle Eventualitäten berücksichtigen. Nur für diejenigen, die Sie vorhersehen können.

Und jetzt haben wir die Situation, dass a) das Weglassen einer vollständigen Plattform (.NET Full Framework), die in .NET Core 1 problemlos unterstützt wurde, nicht etwas war, das Sie vorhersehen konnten. Da es jedoch jetzt passiert ist, können Sie b) den Rückgang der Unterstützung für v1 in Ihren anderen Abhängigkeiten mit einem ziemlich sicheren "Ja, ich kann absolut sehen, dass das eher früher als später passieren wird" antizipieren.

Und ja, Forking und Backporting von Fixes ist eine der möglichen Lösungen, aber das ist etwas, das Sie so gut wie möglich vermeiden möchten. Wenn das .NET Core-Team so etwas gesagt hätte wie „Hey. Sehen Sie, wir beabsichtigen nicht, auf dem vollständigen Framework zu laufen, verlassen Sie sich nicht darauf“, oder noch besser, das hätte diese ganze Diskussion überhaupt nicht ermöglicht wäre nicht notwendig, da sich der Kunde einfach nicht dafür entschieden hätte, in neue Dinge zusätzlich zu .NET Core zu investieren.

@gingters Ich dachte, wir wären an dem Punkt angelangt, an dem Sie zufrieden waren, Ihre ASP.NET Core-Webbits auf .NET Core 2.x oder höher auszuführen und .NET Standard 2.x für die gemeinsame Nutzung von Bibliotheken zwischen Core und Full/UWP/was auch immer zu verwenden . Denn wenn diese Bibliotheken die Unterstützung für .NET Standard 2.x zugunsten von nur .NET Core 2.x einstellen würden, dann würden sie auch die Unterstützung für vollständiges .NET einstellen, und Sie wären so oder so im Stich gelassen.

@markrendle Bis zu dem Punkt, an dem wir ein kritisches Problem in einem der ASP.NET Core-Bits haben, die wir in den freigegebenen Dingen verwenden müssen, nachdem 1x nicht mehr unterstützt wird.

@gingters zum Glück ist es Open Source und Sie können sich bei Bedarf selbst unterstützen (oder einen Drittanbieter bezahlen)!

@markrendle nein. reine Legacy-Projekte sind tot. Unternehmensprojekte sind in der Regel eine große gemischte Codebasis, die Code/Bibliotheken von vor Jahrzehnten bis zu frischen neuen enthält. Netcoreapp zu sein bedeutet nur, dass Sie die Möglichkeit zum Mischen entfernt haben. Daher können wir nicht mehr auf Ihre schicke neue Version umsteigen, sondern auf die alte Version. und die Anti-MS-Arbeitskollegen sagen fröhlich zu mir: „Ich habe es dir gesagt …“ und drängen uns dann, zu Google-Lösungen zu migrieren.

ich plädiere nicht dafür, netfx für immer zu unterstützen. aber ich bin der festen Überzeugung, dass netfx von asp.net core für mindestens 2 Jahre unterstützt werden sollte. nicht nur 1.x sondern auch 2.x.

@qrli Diese "Unternehmensprojekte ... große Mix-Codebasis, die Code / Bibliotheken enthält, stammen von vor Jahrzehnten bis frisch neu." sind alles, was bei Unternehmensprojekten falsch läuft und aufhören muss. Sich darüber zu beschweren, dass eine neue Technologie Sie davon abhält, noch mehr Schlammklumpen in einen großen Ball der Verzweiflung zu werfen, der mit Unterlegscheiben, Draht und Leugnung zusammengehalten wird, ist wie sich darüber zu beschweren, dass eine neue industrielle Laserschneidmaschine mit Sicherheitsfunktionen ausgestattet ist, die Sie davon abhalten, sich hineinzulehnen und abzuschneiden wichtige Teile von dir.

@benaadams

„schnell vorankommen“ ist vielleicht übertrieben; Nach dem vorherigen Veröffentlichungszeitplan von Full Framework könnte es besser als "ohne zusätzliche Verzögerung von 1 - 2 Jahren" beim Versand angegeben werden. Das ist eine verrückte Zeit in der Web-Welt.

Die Dinge ändern sich schnell und die Plattform muss relevant bleiben.

Dies ist eine politische/organisatorische Einschränkung, keine technische. Schau dir an, wie sich die JVM/Java bewegt. Wenn sie sich überhaupt bewegen. Immer noch relevant, viel mehr als .NET heute ist. „Schnelles Handeln“ ist also nicht der Grund, warum sich Leute für Java/JVM entscheiden. Andererseits. Sie entscheiden sich für Java/JVM, weil ihr alle Nachteile fehlen, die mit „schnellem Handeln“ verbunden sind: Es ist eine stabile, zuverlässige Plattform, auf der Ihre Investition nicht in 1-2 Jahren verschwendet ist.

Ich weiß nicht, wenn MS .net ganz schnell bewegen will, wird es schnell gehen. Sie besitzen es, sie können entscheiden, was zu tun ist. Aber die Mächtigen geben nicht viel darüber her: .net full ist „gut genug“ für den jetzigen Stand.

MS hat viele Jahre am Steuer geschlafen und jetzt sind plötzlich Dinge wie Leistung und Speicherdruck wichtig (das sind sie zweifellos), während bei JVM viele Investitionen in diese speziellen Aspekte einer Laufzeit getätigt wurden Jahre und das zahlt sich aus.

Ich weiß nicht, was die kurzfristige Lösung ist, aber langfristig, wenn .NET auf zwei Hauptabteilungen aufgeteilt bleibt (.net voll mit Windows, .net Core mit devdiv), ohne andere Gemeinsamkeiten/Ziele als die gleichen Arbeitgeber verheißt nichts Gutes für uns Außenstehende.

Während hier viele Punkte angesprochen werden und jeder versucht sicherzustellen, dass er die Standpunkte anderer versteht, werden Lösungen wie „Große Unternehmen sollten nicht so sein“ nicht helfen. Selbst wenn Sie sie davon überzeugen könnten, würden sie 20 Jahre brauchen, um damit aufzuhören, weil sie große Unternehmen sind .

@kolectiv Das stimmt, aber zu akzeptieren, dass Unternehmen nicht plötzlich aufhören, Unternehmen zu sein, bedeutet nicht, dass Sie diese Art von Verhalten aktiv fördern/ermöglichen müssen.

Es sollte auch nicht bedeuten, dass _meine_ Anwendungen langsamer laufen und mehr Hosting-Kosten verursachen müssen.

Führen Sie eine Portabilitätsanalyse für unsere stark genutzten Bibliotheken durch, die immer noch auf .NET 4.x auf ASP.NET Core 1.x (EF6, NHibernate, NServiceBus) abzielen, und Mann, diese Bibliotheken sind nicht einmal annähernd in der Lage, auf netstandard20 abzuzielen

Bibliothek | Pkt
---------- | ---------
EF6 | 62.74
NHibernate | 67.39
NServiceBus | 65.68

Und immer noch große Lücken bei fehlenden APIs. EF Core hat immer noch eine große Lücke zu EF6, und wir verwenden immer noch NHibernate, wenn es dort wichtige Funktionen gibt, die in EF6 nicht vorhanden sind. NServiceBus verwenden wir für jedes Projekt, das Messaging durchführt.

Wütend.

@markrendle

Diese "Unternehmensprojekte ... große Mix-Codebasis, die Code / Bibliotheken enthält, stammen von vor Jahrzehnten bis frisch neu." sind alles, was bei Unternehmensprojekten falsch läuft und aufhören muss. Sich darüber zu beschweren, dass eine neue Technologie Sie davon abhält, noch mehr Schlammklumpen in einen großen Ball der Verzweiflung zu werfen, der mit Unterlegscheiben, Draht und Leugnung zusammengehalten wird, ist wie sich darüber zu beschweren, dass eine neue industrielle Laserschneidmaschine mit Sicherheitsfunktionen ausgestattet ist, die Sie davon abhalten, sich hineinzulehnen und abzuschneiden wichtige Teile von dir.

Ja, Mann, sagen wir diesen lästigen Unternehmen und großen Organisationen, dass sie die Dinge anders machen sollen, schneiden Sie den Draht ab! stoppen Sie die Schlammflut! Das wird sie dazu bringen, aufzuwachen und zuzuhören. Oh warte, das wird nicht helfen, da sie das bereits wissen, aber für deine eigene Argumentation mit vielen Dingen arbeiten müssen, die dir egal sind oder die du ignorierst.

Schauen Sie, niemand sagt 'neue Technologie: schlecht!'. Es geht darum, neue Technologien zu verfolgen, ohne sich der Konsequenzen bewusst zu sein, die sie mit sich bringen. Wir alle arbeiten gerne mit den neuesten Bits und müssen uns nicht um alten Kram kümmern, wer will das? Die Realität erzählt jedoch eine andere Geschichte. Wenn du nur mit den neusten Bits arbeiten musst und dich nicht um alten Scheiß kümmern musst, gut für dich! Leider müssen wir traurigen Arbeitsdrohnen in den Schützengräben mit einer anderen Realität leben. Es würde Ihnen passen, wenn Sie zumindest anerkennen, dass die Realität für VIELE Menschen einfach das ist, sie können es nicht ändern, sie können keine andere Zukunft gestalten, es ist das, womit sie arbeiten müssen.

@markrendle Ich bin mir nicht ganz sicher, was Sie vorschlagen? Unsere 15 Millionen Zeilen funktionierenden C#-Code aufgeben und alles neu schreiben? Wir wollten (langsam) auf Netstandard 2.0 umsteigen und hoffentlich Zugang zu Dingen wie Span usw. bekommen, wenn es dazu kommt, aber Probleme wie diese lassen mich bezweifeln, dass das klug ist.

Wir hätten gerne Linux-Unterstützung, aber das fühlt sich eher wie eine Abweichung an. Ich hatte angenommen, dass netstandard mit der fortschrittlichsten Implementierung vorankommen würde und dann Dinge wie das Framework aufholen würden, aber zumindest wüssten wir, dass es so wäre.

@FransBouma Also sollten wir alle leiden, weil Unternehmen dumme Dinge tun wollen? Ich sollte keine schönen Dinge bekommen, weil Multi-Millionen-Dollar-Projekte des öffentlichen Sektors noch nicht dafür bereit sind? Wie funktioniert das?

@markrendle Was ist so dumm daran, den funktionierenden Code behalten zu wollen?

Sie entscheiden sich für Java/JVM, weil ihr alle Nachteile fehlen, die mit „schnellem Handeln“ verbunden sind: Es ist eine stabile, zuverlässige Plattform, auf der Ihre Investition nicht in 1-2 Jahren verschwendet ist.

Und Sie können System.Web praktisch für immer verwenden; Es ist in Windows eingebrannt, was bedeutet, dass es wahrscheinlich nie verschwinden wird. Sie erhalten nicht viel stabiler und zuverlässiger als das.

ASP.NET Core 1.x -> ASP.NET Core 2.x; Alle APIs sind ziemlich gleich, die Hauptänderung besteht darin, die Unterstützung für .NET Framework einzustellen. Es ändert sich sogar für die Pause 😱

ASP.NET Core 1.x läuft auf .NET Core 2.x und .NET Framework, unterstützt .NET Standard 2.x (über .NET Core 2.x); und hat die gleichen APIs wie ASP.NET Core 2.x. Das ist also die Sprungbrettversion.

ASP.NET Core 2.x ist die Break-Release. Es unterstützt immer noch .NET Standard 2.x (über .NET Core 2.x) und nicht viel api-weise hat sich zwischen ASP.NET Core 1.x und ASP.NET Core 2.x geändert; aber löscht .NET Framework.

Könnte eine Alternative sein:

  • ASP.NET Core gehen Sie voran und arbeiten Sie an etwas wie netstandard3.0 (könnte 2.x sein) und nur einer schnelleren Version von netstandard. Etwa einmal im Quartal.
  • Die nächste Version von NetFx könnte erneut springen, um netstandard3.x zu unterstützen, wann immer die nächste Version verfügbar ist. Es müsste nicht einmal der neuste Standard sein.

Dies könnte eine schlechte Idee sein, da möglicherweise nicht alles, was verwendet wird, Teil von netstandard sein muss, aber zumindest ASP.NET Core 2.x würde auf einen Standard abzielen, den die anderen Frameworks schließlich verwenden werden.

Nur Spuckballing. Ich bin mir sicher, dass dies angesprochen wurde.

@bencyoung Ich schlage nur vor, dass es ein bisschen egoistisch ist, darauf zu bestehen, dass sich die ganze Welt um Ihre 15 Millionen Zeilen funktionierenden C # -Codes drehen sollte (der übrigens nicht aufhören wird zu funktionieren). Daher können Sie ASP.NET Core 2.0 nicht verwenden. Sie haben immer noch das vollständige Nur-Windows-Framework ASP.NET, das von Legacy-Unterstützung durchzogen wird wie Brighton through Rock. Es gibt also ein neues Spielzeug, mit dem Sie nicht spielen können, weil es für Sie wirtschaftlich nicht tragbar ist, Ihren Code zu portieren und Ihre Anwendung umzugestalten/umzugestalten. Das ist scheiße, aber viele Dinge tun es auch. Aber wenn Microsoft alles vermeidet, was für bereits zwei Jahrzehnte alte Legacy-Codebasen, die wahrscheinlich noch in VB 6.0 geschriebene COM-Komponenten enthalten, nicht funktioniert, dann werden sie in weiteren 20 Jahren Micro Focus sein.

@adamhathcock Dafür hatte ich angenommen, dass netstandard dafür gedacht ist - eher ein Vereinheitlichungsansatz als ein kleinster gemeinsamer Nenner. Es kann sich so schnell bewegen, wie es will, aber sie wären eine Verpflichtung, die das .NET-Framework schließlich einholen würde. Irgendwann würde es einen Netzstandard geben, der im Grunde das .NET-Framework abzüglich der plattformspezifischen Dinge war, und dann würde er vereinheitlicht

Die nächste Version von NetFx könnte erneut springen, um netstandard3.x zu unterstützen, wenn die nächste Version verfügbar ist.

Ein .NET Framework-Update ist ein erzwungenes Update für jeden Computer auf dem Planeten, auf dem (meistens) Windows ausgeführt wird.

Ein .NET Core-Update ist ein Update, das Sie für eine einzelne Anwendung auswählen .

Sie sind sehr unterschiedliche Tiere.

Nun, eine einfache Möglichkeit wäre, die Verknüpfung zu dieser Seite von der allerersten Seite der ASP.NET Core-Dokumentation an zu beenden.

(Oder fügen Sie einfach eine Zeile „Wählen Sie nicht .NET Framework aus, wenn Sie weiterhin ASP.NET Core verwenden möchten!“ hinzu.)

Sie wären eine Verpflichtung, die das .NET-Framework schließlich einholen würde.

Es gibt https://github.com/aspnet/Home/issues/2022#issuecomment -299609207

Unser Versprechen lautet im Allgemeinen: Wenn der Typ von .NET Framework und .NET Core gemeinsam genutzt wird, beabsichtigen wir, neu hinzugefügte Member nach .NET Framework zu portieren. In sehr seltenen Fällen ist dies möglicherweise nicht möglich, aber der Grundstein liegt darin, dass sie automatisch berücksichtigt werden.

Aber bis es aufholt, wird ASP.NET zur nächsten .NET Standard-Version übergegangen sein, und es wäre niemals die richtige Version von .NET Framework für ASP.NET; es würde immer hinterher sein.

@markrendle nein, sie sind kein großer Schlammball. Ein großer Mix bedeutet nicht, dass sie schlecht konstruiert sind. sie sind modular. Es ist so, dass viele Module kampferprobter Code sind, der vor langer Zeit von wirklich klugen Leuten geschrieben oder von Drittanbietern gekauft wurde. manches ist von c, manches ist in fortran, manches in c++/cli usw. Um zu migrieren oder neu zu schreiben, müssen wir sie verstehen, Papiere lesen, mehr echte Testdaten sammeln, die neue Version erneut testen. es kostet Mühe, aber solche Aufgaben sind nie budgetiert, sondern uns selbst überlassen. Geschäftsleuten ist es egal, ob wir .net Core verwenden oder nicht, aber sie möchten, dass die Funktionen ausgeführt werden. und für Dritte müssen wir sie drängen oder Ersatz suchen.
In der Praxis kann es also einige Jahre dauern.

@benaadams

Und Sie können System.Web praktisch für immer verwenden; Es ist in Windows eingebrannt, was bedeutet, dass es wahrscheinlich nie verschwinden wird. Sie erhalten nicht viel stabiler und zuverlässiger als das.

ASP.NET Core 1.x -> ASP.NET Core 2.x; Alle APIs sind ziemlich gleich, die Hauptänderung besteht darin, die Unterstützung für .NET Framework einzustellen. Es ändert sich sogar für die Pause 😱
ASP.NET Core 1.x läuft auf .NET Core 2.x und .NET Framework, unterstützt .NET Standard 2.x (über .NET Core 2.x); und hat die gleichen APIs wie ASP.NET Core 2.x. Das ist also die Sprungbrettversion.
ASP.NET Core 2.x ist die Break-Release. Es unterstützt immer noch .NET Standard 2.x (über .NET Core 2.x) und nicht viel api-weise hat sich zwischen ASP.NET Core 1.x und ASP.NET Core 2.x geändert; aber löscht .NET Framework.

Ja, und mal sehen, was die Optionen wirklich sind :) ASPNET Core 1.x ist eine Sackgasse: Sie können dorthin portieren, aber Ihr Code kann nicht auf .net Core verschoben werden, wenn Sie von Bibliotheken abhängen, die heute .net voll sind und möglicherweise nicht nach .net core /standard portiert, wenn der Support endet. Die Wahl von ASP.NET Core 1.x jetzt ist nur dann sinnvoll, wenn Ihre Abhängigkeiten bereits auf netstandard2.0/.netcore liegen, dann können Sie problemlos zu asp.net Core 2.x wechseln, da Sie wissen, dass Sie nicht in eine Sackgasse geraten.

Ihr Vorschlag, system.web als Alternative zu nginx und einem JVM-Stack zu wählen, wenn Sie Stabilität haben möchten, ist ein bisschen schwach, finden Sie nicht? :) Es geht um Optionen für eine große Organisation, was man als Plattform wählen kann. Wenn sie keine App erstellen, die völlig neu ist und nicht mit externen Abhängigkeiten arbeiten muss (selten), werden sie wahrscheinlich auf Nummer sicher gehen, und warum sollten sie nicht? Wenn es dann auf system.web oder JVM/nginx hinausläuft, ist die Wahl ziemlich einfach.

Es sind die kleinen Dinge. Ich habe schon einmal darauf gehämmert: Verschlüsselungsfunktionen von SQL Server-Unternehmen. Sie werden diese nicht auf .net Core verwenden, da sie dort nicht vorhanden sind. Orakel? Nö. Wenn Sie also asp.net core und diese Funktionen verwenden möchten, müssen Sie .net full und asp.net core 1.x verwenden. Aber was passiert, wenn diese Funktionen nicht portiert/verfügbar sind, wenn die Unterstützung für asp.net Core 1.x endet? (und wer will die Farm auf einer Plattform wetten, die sich bereits im 'QFE-Modus' befindet?) Zurück zu system.web?

Es scheint mir, dass ein Teil des Problems darin besteht, dass ASP.NET die Entwicklung von .NET Core direkt vorantreibt. Ich denke, das ist eine interne Sache in Microsoft, aber eigentlich sollten die Plattform und eine bestimmte Bibliothek nicht so eng gekoppelt sein.

Wenn etwas Neues zu einer Version von .NET hinzugefügt werden muss, sollte es allen über einen Netstandard-Bump (mit vNext) zur Verfügung gestellt und dann ASP.NET aktualisiert werden, um es zu verwenden, wenn es veröffentlicht wird. Ich denke, es ist die privilegierte Position von ASP.NET, die dieses Problem verursacht. Dies kann unvermeidlich sein, da die Entwicklergruppen innerhalb von Microsoft dieselben sind ...

Als Autor von HPC-Software, die .NET stark nutzt, haben wir auch unser eigenes Zero-Allocation-Parsing usw. ohne Änderungen an der zugrunde liegenden Plattform implementiert. Würden wir von Span usw. profitieren? Absolut! Können wir zu .NET Core wechseln? Nicht für eine lange Zeit. Wird Span usw. zu .NET Framework hinzugefügt? Scheint jetzt schwer zu sagen, ohne dass es sich um eine Netstandard-Verpflichtung handelt ...

@markrendle Sicher, aber wie sieht unser Übergangsplan aus? Ich kann keinen sehen, der nicht auf nicht unterstützte Pfade trifft. Wenn die Änderungen in netstandard waren und dann von ASP.NET Core verwendet wurden, dann wüssten wir zumindest, dass es irgendwann einen Weg gibt ....

@markrendle Ich bin mir nicht sicher, wer die beabsichtigten Benutzer von asp.net core sind. aber was ich gesehen habe, sind hauptsächlich .net-Benutzer, die viel in .net und eine große Legacy-Codebasis (nicht schlecht) investiert haben. Wenn wir nicht die beabsichtigten Benutzer sind, sehe ich nicht, dass node.js/python/go Jungs .net einen Scheiß geben, egal wie gut wir .net finden.
wenn es nicht für unternehmen, sondern für meine eigenen projekte ist, werde ich nicht asp verwenden, sondern stattdessen nancy verwenden. Unternehmen brauchen stabile Garantien und Unterstützung. und sie/wir zahlen viel Geld dafür.

Die einfache Lösung für dieses Problem wäre, wenn Microsoft eine reine Windows-Distribution von CoreCLR erstellen würde, die die gesamte Bandbreite der .NET Framework-Bibliotheken unterstützt.

Die persönliche Seite in mir ist cool, mit .NET Core auf dem PI auf Ubuntu zu spielen, aber die geschäftliche Seite hat .NET Core nicht einmal in Betracht gezogen, weil .NET Framework alles tut, was wir brauchen, und .NET Core im Vergleich nur Ärger macht. Die meisten dieser Probleme betrafen die Werkzeuge und die Einrichtung aller, sodass diese Probleme endlich verschwinden, aber es fehlen immer noch so viele Funktionen ... EF Core ist nicht einmal annähernd ausgereift genug, um EF6 oder NHibernate zu ersetzen, und sie haben gewonnen läuft auch nicht auf .NET Core 2. Das Fehlen von WCF (Host) für SOAP-Dienste ist eine ziemliche Belastung, da dies das ist, was wir den ganzen Tag in der Geschäftskommunikation tun, aber es könnte wahrscheinlich durch cleveres Design und die Verwendung von .NET Core und .NET Framework in mehreren Apps migriert werden. AppDomains sind auch nicht einfach zu ersetzen, obwohl das das geringste meiner Probleme ist. Der Sprung von ASP.NET MVC 5 zu MVC Core war für eine Neufassung unerwartet einfach, aber der Wechsel zu .NET Core führt dazu, dass VS die Zusammenarbeit einstellt und alle Fehler anzeigt.

Lustige Dinge wie das Hosten von ASP.NET Core in WPF werden ebenfalls unmöglich sein.

Es wäre nicht einmal wichtig, ob die Windows CoreCLR-Distribution Closed Source wäre, da sie sich nicht wesentlich von .NET Framework heute unterscheidet.

Entschuldigen Sie mich jetzt, während ich leise weine und meine experimentellen Zweige lösche, die zu ASP.NET Core migriert wurden.

Ihr Vorschlag, system.web als Alternative zu nginx und einem JVM-Stack zu wählen, wenn Sie Stabilität haben möchten, ist ein bisschen schwach, finden Sie nicht?

Es ist das extreme Ende ;)

Wenn es dann auf system.web oder JVM/nginx hinausläuft, ist die Wahl ziemlich einfach.

Ja, wenn Sie JVM verwenden können, verwenden Sie ASP.NET Core 2, da Sie keine Blocker haben und es eine nette Interop- und p/invoking-Funktion hat :)

Wenn die APIs "ziemlich gleich" sind, warum behalten Sie nicht eine Version mit der Nummerierung 2x für alle, haben aber die Möglichkeit, zwischen "Netstandard" oder "Netcore" zu wählen?

Weil es die Interna sind, die sich ändern; und Nutzung von Änderungen an Laufzeit-, JIT- und Standardbibliotheken. Für einen Benutzer erscheinen sie meistens gleich, da dort die Kompatibilität zwischen ASP.NET 1.x und 2.x besteht; auf der exponierten API-Oberfläche, nicht die Interna "hier ist, wie es gemacht wird".

Es scheint mir, dass ein Teil des Problems darin besteht, dass ASP.NET die Entwicklung von .NET Core direkt vorantreibt.

Genauso wie andere Menschen. Sie können eine API-Anfrage unter dotnet/corefx stellen, wie ich es zum Beispiel für ValueTask getan habe ; das sich dann zu Task-likes entwickelte und jetzt Teil von C # 7 ist.

Sobald Ihre API in .NET Core enthalten ist, können Sie sie verwenden (wenn Sie sich für Nightlies entscheiden und sicherstellen möchten, dass die API richtig ist); oder bei der nächsten Version von coreclr/corefx, wenn Sie 6 Monate durchhalten möchten.

und dann ASP.NET aktualisiert, um es zu verwenden, wenn es veröffentlicht wird.

Jetzt müssen Sie 2 Jahre warten. Das ist nicht wirklich praktisch; da die API durch Gebrauch verfeinert werden muss; und durch den Gebrauch wird mehr Entdeckung geschehen. Das ist so, als ob Sie Ihrem Entwicklungszyklus einen zweijährigen Kompilierschritt hinzufügen würden.

Als Autor von HPC-Software, die .NET stark nutzt, haben wir auch unser eigenes Zero-Allocation-Parsing usw. ohne Änderungen an der zugrunde liegenden Plattform implementiert. Würden wir von Span usw. profitieren? Absolut! Können wir zu .NET Core wechseln? Nicht für eine lange Zeit.

Hängt Ihre HPC-Software direkt an Webanfragen? Vermutlich hat es Warteschlangen, die von Webanfragen gesteuert werden, aber es läuft in einem separaten Prozess, also sollte es von dieser Änderung nicht betroffen sein?

Wird Span usw. zu .NET Framework hinzugefügt?

Jawohl

@benaadams

Aber bis es aufholt, wird ASP.NET zur nächsten .NET Standard-Version übergegangen sein, und es wäre niemals die richtige Version von .NET Framework für ASP.NET; es würde immer hinterher sein.

Was völlig in Ordnung und akzeptabel ist, wenn es mindestens eine Versionsüberschneidung gibt (dh wenn Sie auf dem neuesten vollständigen Framework bleiben, gibt es immer noch mindestens eine offiziell unterstützte (ASP).NET Core-Version, die darauf läuft).

Microsoft würde eine reine Windows-Distribution von CoreCLR erstellen, die die gesamte Bandbreite der .NET Framework-Bibliotheken unterstützt.

Oder eine Reihe von .NET Standard 2.0-Bibliotheken; damit sie auf .NET Core laufen können, das nur auf Windows läuft, das die API-Lücke abdeckt?

@benaadams ja, das ist die Idee, obwohl das nicht für etwas funktioniert, das PlatformNotSupportedException auslöst

@qrli Wenn es modular ist, können Sie die Module aktualisieren, die jetzt aktualisiert werden können, und den Rest für später aufheben.

Es sei denn, Sie meinen mit „modular“ „es ist eine massive monolithische System.Web ASP.NET IIS-Anwendung, die Dutzende verschiedener Bibliotheken umfasst, die über PInvoke und COM zusammenarbeiten“, in diesem Fall ist das ein großer Schlammball.

Gibt es eine abschließende Liste, welche Baugruppen betroffen sind und welche nicht? Es wurde erwähnt, dass Microsoft.Extensions.* sicher ist und Microsoft.AspNetCore.Razor.Runtime (angenommen) auch, weshalb Microsoft.AspNetCore.Html.Abstractions auch auf netstandard bleiben muss. Gibt es noch etwas in den Microsoft.AspNetCore.* , das auf netstandard bleibt?

@bencyoung Mein empfohlener Übergangsplan besteht darin, verschiedene Komponenten im Laufe der Zeit zu eigenständigen Diensten zu migrieren, die auf .NET Core 2.x abzielen (oder was auch immer aus dem gesamten Universum der Entwicklungstools für diese bestimmte Komponente am besten funktioniert), und diese Dienste aus Ihrem Legacy-Code zu verbrauchen eine Standard-API-Grenze mit HTTP oder einem Nachrichtenbus, bis Sie eine geeignete verteilte Systemarchitektur haben.

@markrendle Nicht alles gehört jedoch in ein verteiltes System. Als konkretes Beispiel: Ein großer Teil des Grundes, warum Stack Overflow Seiten so schnell rendert, ist, dass es nicht verteilt wird. Obwohl unsere Netzwerklatenz 0,017 ms beträgt, würde dies unserer Anwendung einiges an Netzwerk-, Serialisierungs-, Deserialisierungs- und GC-Kosten hinzufügen. Das Teilen eines Systems in viele Dienste ist keine universelle Antwort. Es ist eine komplizierte, eine kostspielige und für viele Szenarien auch ein Netto-Negativ. Es kann eine gute Sache sein, aber es kann auch eine überkomplizierte schlechte Sache sein.

@markrendle mein Problem ist nicht die Migration zu Diensten, sondern dass einige der grundlegenden Bausteine ​​der Dienstinfrastruktur APIs verwenden, die nicht auf der Roadmap für netstandard20 oder sogar netstandardbanana stehen. Bei .NET Core geht es uns nicht um Greenfield-Anwendungen, sondern um ganze Greenfield-Systeme. System.DirectoryServices ist ein Beispiel, aber für andere ist es WCF und für noch mehr andere System.Data und das SqlClient-Zeug und für uns System.Messaging .

Ich bin dafür, .NET Core zu verwenden, wenn ich kann. Bisher umfasste das Zero-Client-Projekte, Greenfield oder nicht, sie sind alle wegen irgendetwas blockiert.

@NickCraver Ich möchte nicht scherzhaft sein oder so, und ich weiß, dass der wahre Grund, warum SO-Seiten so schnell gerendert werden, darin besteht, dass Sie und die anderen Leute, die sie erstellen, fantastisch sind, aber die Google-Suchergebnisse, die Links zu Ihren Seiten enthalten werden genauso schnell gerendert wie Ihre Seiten, und Sie _wissen_, dass sie aus einem großen, komplizierten verteilten System stammen. Amazon-Seiten werden ziemlich schnell gerendert, gleicher Deal. Ich bin optimistisch, dass ASP.NET Core auf eine Zukunft zusteuert, in der es verwendet werden kann, um Systeme auf die gleiche Art und Weise zu erstellen, mit der gleichen Leistung, und ich denke, es hat eine bessere Chance, dorthin zu gelangen, wenn es sich davon befreit der Update-Zyklus der Vollversion von .NET, der sich in eine kleine Insel verwandelt.

@jbogard Ich sehe das ähnlich, aber das wird ganz anders sein, wenn .NET Core 2.0 herauskommt.

Seufzen.

@jbogard

netstandardbanane

Zitat aus dem Thread

Das Hauptproblem dabei ist für mich und mein Team, dass es keinen Hinweis darauf gab, dass dieser Weg die beabsichtigte Zukunft war. Ich verstehe, dass niemand die Zukunft kennt, aber höre, dass wir alles, was auf dem vollständigen .net-Framework (Komponentenanbieter-DLLs, Zahlungsdienst-SDKS, HSM-SDKs) beruht, in ihre eigenen Dienste ausbrechen und diesen neuen Hop STINGS einführen müssen. Es ist einfach nicht etwas, was diese Site braucht, und jetzt müssen wir entweder mehr Dev-Ops-Komplexität einführen oder den Web-App-Teil für MVC 5 neu erstellen.

Wir entschieden uns für asp.net core für die Geschwindigkeit von Kestrel und die schicke neue API. Es wäre schön gewesen, die Optionen angesichts unserer Abhängigkeiten genauer gegen das Fehlen eines einfachen Upgrade-Pfads abwägen zu können.

Hinzufügen zu @jabrown85
ASP.NET Core war bisher eine Achterbahn der Gefühle.
Nachdem csproj gelandet war, ging ich schließlich zu "es ist jetzt fertig" und hielt es für ein Kinderspiel, etwas Neues darin zu beginnen und zu prüfen, was aktualisiert werden kann. Nach dieser Ankündigung ist es eher so: „Unterstützt .NET Core das Szenario definitiv oder sollten wir auf Nummer sicher gehen und einfach bei MVC5 bleiben?“

Die Verluste sind bisher gering, nur eine in ASP.NET Core geschriebene Anwendung, die die Verwaltungsaufgaben der primären MVC 5-App verwaltet, aber sie wird für immer auf 1.x hängen bleiben, da die Haupt-App NHibernate verwendet.

@markrendle Computer sagt nein

Es wäre schön, wenn es eine Roadmap für vollständiges .NET -> Netstandard gäbe. Einige der grundlegenden Teile sagen nur "Nicht unterstützt" von ApiPort. Ich werde eine umfassendere Analyse der Clientprojekte auf ASP.NET Core 1.x durchführen, um zu sehen, was fehlt.

aber es wird für immer auf 1.x hängen bleiben, weil die Haupt-App NHibernate verwendet.

Sollte nicht sein, NHibernate ist nicht tot, oder?

@benaadams überraschend nein. Es gibt ein paar Dinge, für die EF6 wirklich kein Äquivalent hat. Wir verwenden standardmäßig EF6, aber es gibt Fälle, in denen wir die NH-Route wählen müssen.

@benaadams offiziell nein, es hat Pausen, in denen es fast tot zu sein scheint, aber normalerweise gibt es alle paar Tage einen Commit. ApiPort meldet 72,26 % Abdeckung für .NET Standard, aber ich bin nicht wirklich davon überzeugt, dass es portiert wird (zumindest in naher Zukunft).

Wenn ich die Kommentare lese, bin ich besorgt über die allgemeine Richtung, in die dieses Projekt geht. Lange Zeit war ASP.NET eine gute Wahl für eine stabile und solide Technologie. Allerdings habe ich jetzt nicht das gleiche Gefühl. Es gibt viele „Move Fast and Break Things“-Technologien, aber das ist eine ganz andere Kategorie.
Ich hoffe, dass Microsoft in der Lage sein wird, diese Bedenken auszuräumen und die Erwartungen aller in Einklang zu bringen.

Es geht nicht um Enterprise vs. Non-Enterprise-Software. Heutzutage werden viele Python 2.x-Anwendungen verwendet, und nicht alle sind "Enterprise". Außerdem verwenden nicht alle neuen Projekte Python 3 (fast 9 Jahre nach der Veröffentlichung von Python 3.0!).

Kann jemand den ganzen Thread in einem Blogbeitrag zusammenfassen?

Ich habe alle über 300 Kommentare während des Pendelns/Mittagessens durchgelesen und … ich scheine immer noch nicht ganz „verstanden“ zu haben.

Was ich bekomme ist:

  • Das vollständige .NET Framework wird auf .NET Core 2 nicht unterstützt
  • Jede Abhängigkeit hängt von netcoreapp2.0 statt von netstandard2.0 ab
  • Wenn ich so etwas wie DirectoryServices oder Drawing möchte, muss ich Full Framework fallen lassen und zu 2.0 springen

Irgendwie habe ich den Rest vermisst... vollen Terminkalender und alles.

@ Maxim Rouiller

Wenn ich so etwas wie DirectoryServices oder Drawing möchte, muss ich Full Framework fallen lassen und zu 2.0 springen

Nein, wenn Sie eine Bibliothek verwenden möchten, die .net Core nicht unterstützt, können Sie AspNet Core 2.0+ überhaupt nicht verwenden.

@MaximRouiller , was sie gerade getan haben, ist, dass Asp.Net-Kernprojekte nicht in der Lage sein werden, auf vollständige Framework-Assemblys zu verweisen, was es für viele, wenn nicht die meisten, unbrauchbar macht. Sie sagen, dass Assemblys wie system.drawing und Directoryservices auf den neuen Netstandar portiert werden oder ich weiß nicht, aber alte Assemblies werden nicht funktionieren, es sei denn, jemand portiert sie, also ist es für viele ziemlich nutzlos, weil einige Assemblies veraltet sind und niemals portiert werden. Zusammenfassend ist festzuhalten, dass jeder, der .net Core mit der Vollversion des .NET-Frameworks verwendet hat, einfach aufgeschmissen wurde und zu MVC 5 zurückkehren muss.

@davidfowl Danke übrigens für diese Liste . Das ist das sehr wichtige "Also, was haben wir davon?" Stück, das die Leute brauchen, um Kosten/Nutzen in ihren Gedanken abzuwägen.

Wenn Sie es noch nicht getan haben, lesen Sie die Liste , damit Sie auf beiden Seiten informiert sind. Ich stehe immer noch zu dem Wunsch, dass 2.x eine Übergangsversion ist (mit berechtigten Vorteilen für das Unternehmen, um den Wechsel tatsächlich zu rechtfertigen) und dass 3.x die Gewinner sind. Auch wenn es 2 Tage später raus kam. Ich schätze die Einblicke auf allen Seiten sehr.

@davidfowl du sagtest:

Bibliotheken können zusätzlich zum Standard geschrieben werden. Wenn Dinge im Standard selbst geändert werden müssen, dauert es viel länger, bis er in allen Implementierungen von .NET übernommen wird, und dazu gehört auch .NET Framework. Es kann ein paar Dinge bedeuten:
.NET Standard wird sich mit der Geschwindigkeit der langsamsten Implementierung weiterentwickeln
.NET Standard wird sich in einem anderen Tempo weiterentwickeln und .NET Framework wird als letztes aufholen.

Aber warum ist das so? Können Sie nicht .NET Standard vNext veröffentlichen und .NET einige Zeit später (einige Monate bis ein Jahr später) nachholen lassen? Das bedeutet, dass Leute, die auf dem neuesten Stand sind und den neuesten ASP.NET Core wollen, in .NET Core hosten können, und Leute, die .NET für ihren Legacy-Code benötigen, können schließlich diese Version von ASP.NET Core verwenden, sobald .NET aufholt auf die verwendete .NET Standard-Version. Ich verstehe nicht, warum .NET Standard so schnell wie die niedrigste Implementierung auf Touren gebracht werden muss.
Auch hier sprechen wir über offizielle Implementierungen des Standards, aber es wird andere Implementierungen geben, die nicht zusammen mit dem Standard aktualisiert werden.
So lassen Sie keine Menschen zurück. Sicher, sie brauchen etwas länger, um von den neuesten Funktionen zu profitieren, wenn sie in .NET sind, aber sie bleiben nicht für immer hängen.

@jdom , weil ich die Geschwindigkeit kenne, mit der sich .NET Framework ändert und warum es langsam sein muss. Es ist eine andere Distribution und vielleicht gibt es dafür nicht genug Wertschätzung. Jede Änderung wird auf Milliarden von Maschinen übertragen. Die Schichtung ist auch völlig anders, also ist es nicht trivial, darüber nachzudenken.

Ich verstehe nicht, warum .NET Standard so schnell wie die niedrigste Implementierung auf Touren gebracht werden muss.

Wenn wir die niedrige Wassermarke für den .net-Standard in ASP.NET Core weiterhin erhöhen, verfehlt dies den Zweck und lässt Sie in der gleichen Situation zurück. Sicher fühlen Sie sich nicht zurückgelassen, weil es ein Versprechen gibt, dass diese APIs eines Tages in .NET Framework eingeführt werden, aber in welchem ​​Zeitraum? .NET 4.7 vervollständigt immer noch nicht die Funktionsparität mit .NET Standard 2.0.

@davidfowl , aber dies wird das gleiche Problem wie bei PCLs zurückbringen, es wird der kleinste gemeinsame Nenner und ein Schmerz in der Verwendung, die Tatsache, dass ASP.NET die Verwendung aufgibt, zeigt dies bereits.

@davidfowl , aber dies wird das gleiche Problem wie bei PCLs zurückbringen, es wird zum kleinsten gemeinsamen Nenner und zu einem Schmerz in der Verwendung.

@Suchiman wie ist das ein Problem? Das einzige Problem mit PCLs war, wie sie dynamisch berechnet und in NuGet dargestellt wurden, was es schwierig machte, vorherzusagen, was Sie bekommen würden. Wie sonst würde netstandard funktionieren, wenn es kein API-Set wäre, das von verschiedenen Implementierungen implementiert werden könnte?

Was die Verwendung von PCLs nervig machte, war die superduper kleine API-Oberfläche. .NET Standard 1.3-1.4 reicht aus, um die meisten grundlegenden Bibliotheken API-weise zu implementieren.

Bei .NET Standard ging es immer um Breite.

Bei ASP.NET Core und .NET Core ging es um einen wettbewerbsfähigen , plattformübergreifenden Server-Stack zum Erstellen leichter Mikrodienste. Der Atem in diesem Sinne war eine breitere Plattformunterstützung (Laufen auf Linux, OSX, Tizen, Pi usw.).

@davidfowl

Wir haben Zeichenfolgen als eines der wichtigsten Dinge identifiziert, die wir in .NET Core angehen möchten. Es gibt unzählige Ideen, aber eine davon ist, dass Zeichenfolge standardmäßig utf8 ist (jede Menge Kompatibilitätsprobleme, aber folgen Sie mir hier).

Eine andere Sache, die wir beheben möchten, ist die Möglichkeit, billige Segmente von Arrays/Strings, jedes Stück zusammenhängenden Speichers, zu nehmen. Wir haben Span hinzugefügtund sehen Buffer anum dies darzustellen. Es könnte bedeuten, dass String und Array neue Schnittstellen implementieren, die es ermöglichen, einen Slice zu nehmen, der eine 0-Zuweisung erfordert.

Es hört sich so an, als ob dies bedeutet, dass, wenn ich diese neuen Bits in einer Bibliothek verwenden möchte, die Bibliothek auch auf netcoreapp2.0 anstelle von netstandard2.0 abzielen muss. Ist das korrekt?

Es ist eine wirklich schlechte Idee, das alte 4.x-Framework nicht mehr zu unterstützen. Die Leute aktualisieren nicht, wenn es viel Arbeit verursacht. Sehen Sie sich den super alten Klassiker ASP an, der seit 2002 veraltet ist - ungefähr 15 Jahre. Und wir haben alte Anwendungen, die noch im klassischen ASP existieren! Möchte Microsoft etwas Ähnliches noch einmal sehen? Die Abschaffung des alten 4.x-Supports ist etwas, das zwingend getan werden muss - aber auf lange Sicht! Nicht jetzt. Dies kann in einigen Jahren eine Option sein, wenn .NET Core der De-facto-Standard ist und nur noch alte Anwendungen das Netz 4.x verwenden.

Die Idee hinter (ASP).NET Core ist wirklich großartig, das Beste, was Microsoft seit der Veröffentlichung von .NET gemacht hat. Aber so ein Chaos trübt dieses schöne Konzept. Außerdem ist es sehr traurig, dass Microsoft so massive Änderungen alleine beschließt, ohne darüber in der Community zu diskutieren! Scheint, als hätte dieses Unternehmen noch nicht vollständig gelernt, wie man mit Open-Source-Projekten umgeht.

@davidfowl

Bei .NET Standard ging es immer um Breite.

Breite an APIs oder Plattformen?

Was ist das Problem bei der Entwicklung .netstandard im gleichen Tempo wie .netcoreapp ?
Ist eine der BCL-Tunings spezifisch für .netcoreapp , weil sie niemals in den anderen Frameworks implementiert werden?

Die Veröffentlichung .netstandard2.1 zur gleichen Zeit wie .netcoreapp2.1 macht keinen Unterschied zur Veröffentlichung von zuerst .netcoreapp2.1 und ein Jahr später .netstandard2.1 zur gleichen Zeit wie .net50 , außer dass Pakete, die auf .netstandard2.1 abzielen, sofort auf .net50 funktionieren würden, aber blockiert werden, wenn sie auf .netcoreapp2.1 abzielen

ASP.NET Core ist ein High-Level-Webapp-Framework, das auf .NET Core aufbaut und in Zukunft auf .NET Core abzielt, _allerdings_ kann es auch ein High-Level-Webapp-Framework sein, das stattdessen auf .NET Standard aufbaut, sodass es darauf abzielt eher eine Referenz-API-Schnittstelle als eine spezifische Implementierung davon.

Die öffentliche Positionierung von .NET Standard ist ein einfaches Ziel, auf das man aufbauen kann, während man die Implementierungsdetails beiseite lässt – mit 2 offiziellen Frameworks direkt von Microsoft, um die meisten Anwendungsfälle abzudecken.

Warum diese Geschichte jetzt ändern? Wenn das .NET Framework nie aufholt, scheint das nebensächlich zu sein. Zumindest besteht die Möglichkeit, dass dies der Fall ist, oder ein anderes Drittanbieter-Framework kann dies tun. Was also, wenn es nur eine einzige Implementierung gibt, die realistischerweise Schritt hält? Genau aus diesem Grund haben wir Schnittstellen in unseren Anwendungen, auch wenn es nur eine einzige konkrete Implementierung gibt, damit wir die Flexibilität und die Vorteile haben, die das bringt.

Vielleicht den Bereich auf ASP.NET Core 2.0 inline mit .NET Standard 2.0 herunterfahren und dann .NET Standard 2.1 für neuere Features verwenden? Fügen Sie einige anständige Support-Zeitpläne hinzu und würde das nicht dieses ganze Dilemma lösen? Microsoft besitzt den .NET Standard und beide Frameworks, daher scheint diese Angst vor inkrementierenden Versionen völlig unbegründet zu sein ...

Ich denke, es sollte berücksichtigt werden, dass ASP.NET zu ASP.NET Core nicht der Migrationspfad für alle ist.

ASP.NET auf dem vollständigen Framework wird bleiben und Funktionen erhalten, aber nicht wie Core.

Die Migration wird im Laufe der Zeit einfacher, aber nie zu 100 % übereinstimmen.

Die Leute führen immer noch klassisches ASP aus. Das ist auch in Ordnung für sie.

@davidfowl Ich habe großen Respekt vor dem gesamten Team und den Fortschritten, die Sie alle machen. Also, bitte nehmen Sie das nicht als herablassend auf das, was passiert. Ihr seid Pioniere und wir alle betrachten euch als Vorbilder dafür, wie man die Dinge richtig macht. Aber ich sehe viele dieser Punkte nicht als unmittelbare Probleme bei der Zieländerung, besonders wenn es nicht kommuniziert wurde. Vielleicht bin ich falsch.

Ich möchte hier ein paar verrückte Sachen rauswerfen, weil es ein paar Mal erwähnt wurde. Was ich gleich sagen werde, hat keinen Einfluss darauf, was passieren wird, es ist an dieser Stelle alles Spekulation. Mehrere Leute haben gefragt, warum wir auf .NET Core statt auf .NET Standard abzielen wollen.

  • Wir haben Zeichenfolgen als eines der wichtigsten Dinge identifiziert, die wir in .NET Core angehen möchten. Es gibt unzählige Ideen, aber eine davon ist, dass Zeichenfolge standardmäßig utf8 ist (jede Menge Kompatibilitätsprobleme, aber folgen Sie mir hier).

Dieser Punkt hier wäre definitiv ein Game Changer, aber meiner Meinung nach ist es der einzige, der absolut kein Targeting-Framework erfordert, und es ist sowieso nicht für netcoreapp20.

  • Eine andere Sache, die wir beheben möchten, ist die Möglichkeit, billige Segmente von Arrays/Strings, jedes Stück zusammenhängenden Speichers, zu nehmen. Wir haben Span hinzugefügtund sehen Buffer anum dies darzustellen. Es könnte bedeuten, dass String und Array neue Schnittstellen implementieren, die es ermöglichen, einen Slice zu nehmen, der eine 0-Zuweisung erfordert.
  • Dies führt zu neuen Methoden für String, die eine Aufteilung ermöglichen, bei der nicht jedes Mal ein Array zugewiesen wird.
  • Dies führt zu Überladungen von Int, UInt usw. (TryParse), die Span einnehmenund Span.
  • Dies führt zu neuen Codierungsroutinen, die Span nehmen.
  • Pufferund SpanDamit können Sie Speicher auf einheitliche Weise darstellen, und wir möchten den Netzwerkstapel aktualisieren, um das Übergeben von vorab fixierten Puffern zu ermöglichen, die Span benötigenoder Puffer.

All dies ist immer noch als Pakete über dem aktuellen Netzstandard implementierbar. Dazu brauchen Sie nicht einmal netstandard20. Ich verstehe, dass ich dieses Gepäck nicht herumtragen möchte, aber der Rest von uns draußen in der Nicht-MS-Welt muss ständig benutzerdefinierte BCL-ähnliche Impls erstellen, wenn der Anwendungsfall oder die Leistung nicht passt. Ganz zu schweigen davon, dass die Span-API auch nicht für 2.0 vorgesehen ist (es sei denn, das wird wieder geändert).

Kestrel wird HTTP2 im 2.x-Zeitrahmen implementieren (derzeit auf 2.1 ausgerichtet) und das erfordert neue APIs im SSL-Stream, um ALPN auszuführen (https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation).
Http-Client auf .NET Core unterstützt Duplex-Streaming, wodurch es möglich wird, Streaming-Endpunkte über http in Signalr über eine einzige HTTP-Anforderung ohne Websocket zu implementieren.

Ich habe das Gefühl, dass dieser etwas kniffliger ist, aber nicht allzu anders als Kestrel, der libuv herumträgt. Die CURL-Implementierung von .Net Core kann einfach in ein Netstandard-Erweiterungspaket gezogen werden, bis alle aufholen.

  • Wir haben die Header-Parser-Implementierungen von HttpClient und System.Net.Http gegabelt und umbenannt (https://github.com/aspnet/HttpAbstractions/tree/d1d9bceff56cb44a194ae36923ce687e5e353006/src/Microsoft.Net.Http.Headers), damit wir sie verbessern konnten und lassen Sie sie sowohl .NET Framework als auch .NET Core unterstützen. .NET Core hat eine Kopie dieser Verbesserungen, die es nicht zurück geschafft hat, weil sie nicht verbessert werden mussten (wir konnten sie nicht nutzen).

Richtig, aber das ist in diesem Fall wohl der richtige Weg. Es ist frustrierend zu warten und an den Implementierungen festzuhalten, aber auch hier sehe ich keinen Unterschied zu dem, was andere tun, wenn sie ein Framework oder eine Bibliothek schreiben.

Nochmals, genau wie der Rest von uns.

Bei ASP.NET Core und .NET Core ging es um einen wettbewerbsfähigen, plattformübergreifenden Server-Stack zum Erstellen leichter Mikrodienste.

ASP.Net Core hatte solche Nachrichten. .Net Core wurde vom ersten Tag an als voll funktionsfähige xplat-serverseitige .Net-Framework-Teilmenge gemeldet. Ich habe noch nie jemanden sagen hören, dass .Net Core nur für Microservices ist. Ich habe gehört, dass Sie es mit ASP.Net Core verwenden können, wenn Sie möchten, aber auch Konsolen-Apps, Datenanalyse, DB-Dienste usw. Ist die Ausrichtung von .Net Core effektiv „das, was das ASP.Net Core-Team am meisten will“?

ASP.NET auf dem vollständigen Framework wird bleiben und Funktionen erhalten, aber nicht wie Core.

Wird es? Ich habe noch niemanden von MS gesehen, der bestätigt, dass noch daran gearbeitet wird. Mein Bauchgefühl sagt, dass es nicht so ist. Ich verstehe es. Das Team braucht einen Moment der Art „Move it or lose it“, um sich zu befreien. Ich glaube nur nicht, dass dies noch der Moment ist.

Angenommen, wir haben eine Business-Logik-4.6-Assembly, die den Oracle.Net-Treiber, NHibernate und RabbitMQ (alle in 4.6) verwendet. Die Schnittstelle mit ASP.Net besteht nur über unsere Geschäftsobjekte, Anforderungen und Antworten. Können wir auf diese Assembly in unserem ASP.Net Core 2 verweisen, ohne sie neu zu kompilieren?

Meine kurze Zusammenfassung
aspnetcore

@ stefan2410 kurze Antwort, nein, Sie können nicht auf das vollständige Framewrok verweisen, Sie können auf diese Assemblys nur verweisen, wenn sie für Netstandar 2.0 erstellt wurden.

@mattnischan

All dies ist immer noch als Pakete über dem aktuellen Netzstandard implementierbar. Dazu brauchen Sie nicht einmal netstandard20. Ich verstehe, dass ich dieses Gepäck nicht herumtragen möchte, aber der Rest von uns draußen in der Nicht-MS-Welt muss ständig benutzerdefinierte BCL-ähnliche Impls erstellen, wenn der Anwendungsfall oder die Leistung nicht passt.

Es tut mir leid, aber das ist es wirklich nicht. Sie können Patch-Typen nicht affen. Es sei denn, Sie schlagen vor, dass wir neue Typen hinzufügen und die vorhandenen nicht ändern.

Ganz zu schweigen davon, dass die Span-API auch nicht für 2.0 vorgesehen ist (es sei denn, das wird wieder geändert).

Span existiert in 2.0 als Implementierung, aber nicht als öffentliche API. Wir nehmen Breaking Changes in neuen Majors vor, damit wir mehr Features in Minor-Versionen machen können. Wenn ASP.NET Core 2.1 auf .NET Standard 2.1 abzielt, wird die .NET Framework-Unterstützung wieder eingestellt.

Ich habe das Gefühl, dass dieser etwas kniffliger ist, aber nicht allzu anders als Kestrel, der libuv herumträgt. Die CURL-Implementierung von .Net Core kann einfach in ein Netstandard-Erweiterungspaket gezogen werden, bis alle aufholen.

Sie sagen also, wir sollten alle Klassen in der BCL umbenennen, damit wir sie auf beiden .NET-Standards verwenden können.

Ich habe noch nie jemanden sagen hören, dass .Net Core nur für Microservices ist. Ich habe gehört, dass Sie es mit ASP.Net Core verwenden können, wenn Sie möchten, aber auch Konsolen-Apps, Datenanalyse, DB-Dienste usw. Ist die Ausrichtung von .Net Core effektiv „das, was das ASP.Net Core-Team am meisten will“?

Nein, .NET Core ist ein Allzweck-Framework, das ursprünglich keine Branchen im Kern hatte. Es ist möglich, dass ASP.NET Core nur eine vertikale Stelle anstelle von Bibliotheken auf .NET Core sein sollte, es hätte möglicherweise einen Teil dieser Verwirrung vermieden.

Wird es? Ich habe noch niemanden von MS gesehen, der bestätigt, dass noch daran gearbeitet wird. Mein Bauchgefühl sagt, dass es nicht so ist. Ich verstehe es. Das Team braucht einen Moment der Art „Move it or lose it“, um sich zu befreien. Ich glaube nur nicht, dass dies noch der Moment ist.

Ja, die HTTP/2-Unterstützung wurde in der letzten Version hinzugefügt. Es gibt ein anderes Team, das an ASP.NET und IIS arbeitet und Verbesserungen vornimmt. Sie sind jedoch nicht in derselben Größenordnung wie ASP.NET Core.

Ich habe diesbezüglich keine sehr starken Gefühle, da ich es vermieden habe, meine ASP.NET Core-Dienste wie die Pest auf dem vollständigen Framework auszuführen. Abgesehen davon musste ich vermeiden, einige schöne und ausgereifte Bibliotheken zu verwenden, da sie .NET Standard nicht unterstützten, weil sie entweder auf netstandard2.0 warteten oder einfach nicht wollten.

Meine Befürchtung ist, dass das Entfernen der Möglichkeit, ASP.NET Core auf dem vollständigen Framework auszuführen, Benutzer davon abhalten wird, ihre aktuellen MVC 5/Web API 2-Apps auf ASP.NET Core zu portieren, was nur einen weiteren Grund für Bibliotheksautoren darstellt, die Portierung auf .NET zu vermeiden Standard. Warum sollten Sie sich die Mühe machen, ein Upgrade durchzuführen, wenn keiner Ihrer Benutzer davon profitiert? Es wird zu einem Henne-Ei-Problem und ich habe nur Angst, dass dies dem Ökosystem als Ganzes schaden wird, gerade als es anfing, etwas Zugkraft zu bekommen. Zuerst brauchen Sie ASP.NET Core-Benutzer, und ich bin nicht davon überzeugt, dass es so viele davon gibt, wie wir alle möchten. Hoffentlich liege ich falsch.

Wenn ASP.NET Core 2.1 auf .NET Standard 2.1 abzielt, wird die .NET Framework-Unterstützung wieder eingestellt.

Nein, es bedeutet nur, dass Net Framework ASP.NET Core 2.1 automatisch unterstützt, sobald es .NET Standard 2.1 unterstützt, wann immer das der Fall ist, selbst wenn es ein oder zwei Jahre dauert.

Dasselbe gilt für alle anderen .NET-Standard-kompatiblen Plattformen (Xamarin / Unity / ...).

Auf .NET Standard aufzubauen bedeutet, dass andere Plattformen _irgendwann_ aufleuchten werden, auf .NET Core aufbauen bedeutet, dass sie __nie__ aufleuchten werden.

Ich nehme an, dass nach wie vor geplant ist, dass full-fx netstandard einholt, wenn auch mit großer Verzögerung?
(und wenn von keiner anderen Plattform außer NET Core erwartet wird, dass sie .NET Standard 2.1 implementiert, warum sollte man dann überhaupt einen .NET Standard haben?)

Es tut mir leid, aber das ist es wirklich nicht. Sie können Patch-Typen nicht affen. Es sei denn, Sie schlagen vor, dass wir neue Typen hinzufügen und die vorhandenen nicht ändern.

Letzteres wurde in 1.x in den meisten Fällen bereits erledigt, oder? Ist das plötzlich nicht mehr haltbar?

Span existiert in 2.0 als Implementierung, aber nicht als öffentliche API. Wir nehmen Breaking Changes in neuen Majors vor, damit wir mehr Features in Minor-Versionen machen können. Wenn ASP.NET Core 2.1 auf .NET Standard 2.1 abzielt, wird die .NET Framework-Unterstützung wieder eingestellt.

Warum sollte es fallen gelassen werden? Wollen Sie damit sagen, dass Span auf Framework _nie_ existieren wird?

Sie sagen also, wir sollten alle Klassen in der BCL umbenennen, damit wir sie auf beiden .NET-Standards verwenden können.

Boah, nein. Ich sage, wenn ich ein Wörterbuch mit einer anderen API benötige, muss ich etwas anderes erstellen und es auch nicht System.Collections.Generic.Dictionary nennen, so wie Sie es bereits mit Microsoft.Net getan haben.*

Ja, die HTTP/2-Unterstützung wurde in der letzten Version hinzugefügt. Es gibt ein anderes Team, das an ASP.NET und IIS arbeitet und Verbesserungen vornimmt. Sie sind jedoch nicht in derselben Größenordnung wie ASP.NET Core.

Das ist fair. Das war mir nicht bewusst.

Letzteres wurde in 1.x in den meisten Fällen bereits erledigt, oder? Ist das plötzlich nicht mehr haltbar?

Es schafft ein Durcheinander. Sie haben versucht, das so wenig wie möglich zu tun. Das API-Design und die Bereitstellung sind so drastisch komplizierter, als die meisten Leute glauben, denke ich. Und es sind nicht die Microsoft-Leute, die es so machen, es ist die Realität, viele Plattformen und Zeitpläne zu unterstützen. Ich habe das erst gewürdigt, als ich mehrere Male mittendrin war und alles durchsprach. Ich wünschte wirklich, die Typweiterleitung wäre auf Methodenebene. Das hätte schon einige Fälle lösen können :(

Warum sollte es fallen gelassen werden? Wollen Sie damit sagen, dass Span niemals auf Framework existieren wird?

Es müsste aus ASP.NET Core 2.0 entfernt werden, da die Zeitachsen nicht mehr ausgerichtet würden, da das vollständige Framework es noch nicht hätte.

Es müsste aus ASP.NET Core 2.0 gelöscht werden, da die Zeitachsen nicht mehr ausgerichtet würden, da das vollständige Framework es noch nicht hätte.

AFAIK, Spans sind Teil eines netstandard1.x -Pakets, das auf .NET Desktop verwendet werden kann (es ist eine portable Implementierung, daher hat sie nicht den gleichen Leistungsschub, als ob sie in die CLR gesichert wäre, aber es ist wahrscheinlich gut genug).

Bearbeiten: Das System.Memory -Paket hat ein netstandard1.0 -TFM, sodass es sogar unter .NET 4.5 verwendet werden kann.

image

Letzteres wurde in 1.x in den meisten Fällen bereits erledigt, oder? Ist das plötzlich nicht mehr haltbar?

Aus diesem Grund stellen wir heute die Feature-Arbeit in bestimmte Richtungen ein. Es ist beabsichtigt und wir halten uns zurück und weigern uns, neue APIs zu verwenden, indem wir Dinge außerhalb von .NET Standard kopieren und neu implementieren, damit .NET Framework funktionieren kann. Das ist noch nicht alles, aber es gibt einige grundlegende Teile, die wir in Zukunft ansprechen möchten, schließlich kontrollieren wir (Microsoft) beide Seiten.

Warum sollte es fallen gelassen werden? Wollen Sie damit sagen, dass Span niemals auf Framework existieren wird?

Span selbst hat eine portable Version, die überall ausgeführt werden kann. Ich bin mir nicht sicher, ob die schnelle Implementierung jemals auf .NET Framework erfolgen wird. Die APIs, die zu .NET Framework hinzugefügt werden und Span nutzen, können viel länger dauern als Span selbst, es ist umfangreich. Wann haben wir das letzte Mal String und Array in .NET Framework geändert?

Boah, nein. Ich sage, wenn ich ein Wörterbuch mit einer anderen API benötige, muss ich etwas anderes erstellen und es auch nicht System.Collections.Generic.Dictionary nennen, so wie Sie es bereits mit Microsoft.Net getan haben.*

Genau das schlagen Sie vor. Wir möchten kein Microsoft.Extensions.Collections.Generic haben. Wir versuchen das Beste, um das zu vermeiden, und wir leben wo möglich mit den alten APIs und Polyfill (https://github.com/aspnet/DependencyInjection/blob/139d91e57dd31fcd5c6ddaf11ad1f771b5855807/src/Microsoft.Extensions.DependencyInjection/Internal/ConcurrentDictionaryExtensions.cs). Dies ist nicht nachhaltig und bedeutet, dass .NET Core nicht von den Vorteilen profitiert, da wir die Verwendung aktiv vermeiden.

@PinpointTownes mit Spans ist nicht gut genug, sie müssen sie in Methodenaufrufen für vorhandene Typen verwenden. An diesem Punkt kommt die Weiterleitung auf Klassenebene ins Spiel und verursacht viele Probleme.

@ 0x53A

Das ist fair. Können Sie mir sagen, warum beliebte Bibliotheken auf NuGet die Unterstützung für ältere .NET Framework-Versionen, die eindeutig nicht mehr unterstützt werden, nicht einstellen? Die beliebtesten Bibliotheken zielen auf net20, net35, net40 usw. ab. Warum sollte es plötzlich in Ordnung sein, die höchste Version von .NET Framework zu verlangen, um weiterhin ASP.NET Core zu verwenden? Meint ihr das wäre sinnvoll?

Dies ist ein Show-Stopper. Ich muss erwägen, Migrationen von ASP.NET MVC 5/Web Api 2 zu Core abzubrechen. Viele stabile Frameworks sind noch nicht für Core verfügbar. Wir verwenden immer noch EF6.x , weil EF Core noch nicht ausgereift genug ist Funktionsvergleich .

@PinpointTownes mit Spans ist nicht gut genug, sie müssen sie in Methodenaufrufen für vorhandene Typen verwenden.

"brauchen" ist wohl etwas übertrieben. Spans werden hauptsächlich für die Leistung verwendet, daher hindert sie nichts daran, die vorhandenen not-super-perfy-Überladungen auf .NET Desktop mithilfe von ifdefs zu verwenden, bis .NET Desktop native Unterstützung für Spans erhält.

@davidfowl Ich denke, das große Problem ist emotional. Wenn Sie auf netstandard abzielen, weiß ich, dass ich irgendwann von 1.x auf 2.x upgraden kann (wenn auch mit einer Verzögerung). Meistens ist das Aktualisieren von netfx für eine Anwendung keine so große Sache (anders für eine Bibliothek).

Aber einige Apps werden nie in der Lage sein, den Sprung netfx -> netcore zu schaffen. Wenn Sie also auf netcore abzielen, wissen sie, dass sie mit 1.x in einer Sackgasse stecken.

In dieser Hinsicht wäre es besser gewesen, wenn der Asp.net-Kern nie auf netfx gelaufen wäre, so wie es aussieht, sie erwarteten, dass dies so bleibt, und fühlen sich jetzt (zu Recht, meiner Meinung nach) betrogen. Schließlich haben sie dafür vielleicht schon viel Zeit investiert.

Ich bin nicht persönlich daran beteiligt, weil ich kein asp.net-Benutzer bin, meine große Frage ist eigentlich nur

Ich nehme an, dass nach wie vor geplant ist, dass full-fx netstandard einholt, wenn auch mit großer Verzögerung?
(und wenn von keiner anderen Plattform außer NET Core erwartet wird, dass sie .NET Standard 2.1 implementiert, warum sollte man dann überhaupt einen .NET Standard haben?)


In Bezug auf andere Bibliotheken, die auf net20, net35 usw. abzielen, versuchen meiner Erfahrung nach die meisten Autoren, auf die niedrigste Version abzuzielen, die sie können, und schneiden nur Plattformen ab, auf denen sie keine andere Wahl haben.

Und __ja, ich denke, es ist vernünftig, die Unterstützung für ältere Versionen von .NET Framework__ einzustellen, weil es immer noch einen klaren Migrationspfad gibt. Aktualisieren Sie einfach Ihre Version. Meistens müssen Sie nicht einmal etwas ändern, sondern "nur" neu kompilieren und testen.


Ich denke, Sie unterschätzen ernsthaft die Anzahl der Apps, die niemals auf Netcore abzielen können - nur eine einzige Closed-Source-Abhängigkeit von Drittanbietern reicht aus, um dies zu blockieren.

Span selbst hat eine portable Version, die überall ausgeführt werden kann. Ich bin mir nicht sicher, ob die schnelle Implementierung jemals auf .NET Framework erfolgen wird. Die APIs, die zu .NET Framework hinzugefügt werden und Span nutzen, können viel länger dauern als Span selbst, es ist umfangreich. Wann haben wir das letzte Mal String und Array in .NET Framework geändert?

@davidfowl Ich denke, das ist vielleicht ein Teil des Problems. Ich habe hier ehrlich gesagt ein bisschen den Advokaten des Teufels gespielt, weil wir als Greenfield-App, die kurz vor der Einführung von .Net Core gestartet wurde, in der Mitte stecken, also spannen wir die Linie.

Unser Gedanke war schon immer, verwenden Sie die schicken neuen Bibliotheken (wie Kestrel), wenn es irgendwie möglich ist, aber warten Sie, bis sich .Net Core stabilisiert hat (und ich bin froh, dass wir das getan haben, wenn auch nur wegen der Werkzeugänderungen), _oder_ warten Sie auf die coole Core-Bits, um es zurück zum Framework zu schaffen. Ich denke, die meisten Leute sind davon ausgegangen, dass die meisten, wenn nicht alle Fortschritte, die Corefx gemacht hat, es in Framework vNext oder vNext+1 schaffen würden. Aber es sieht (aus unserer Sicht von 30.000 Fuß) aus dieser und anderen Änderungen so aus, dass Framework keine Plattform der Zukunft ist.

Ich denke, wenn es so ist, dann ist es so. Unser Projekt ist riesig, also vertrauen Sie mir, wenn ich sage, dass ich den Schmerz verstehe, einen Haufen benutzerdefinierter Impls von Dingen zu haben, die nahe, aber nicht ganz BCL-Typen oder Ifdef-Spaghetti sind. Also schlage ich nichts aus Unkenntnis der Komplikationen vor. Es gibt definitiv Kompromisse.

In der Tat eine gute Frage: Was bleibt von der Rückportierung von .net-Kernfunktionen auf .NET full? Wie ich hier gelesen habe, ist .NET full so spröde, dass das Verschieben von Code ewig dauert (es bewegt sich sehr langsam) und kann jeden Moment brechen (könnte sein, keine Ahnung, wie verflochten es ist), also schließe ich daraus, dass das nicht passieren wird sehr oft.

Es kann nicht beides sein: Entweder ist die Rückportierung auf .NET full in Ordnung, sie veröffentlichen nur seltener (z. B. alle 6 Monate bis zu einem Jahr) oder es ist sehr kompliziert und fehleranfällig. Wenn es ersteres ist, beschleunigen Sie einfach das Tempo und lassen Sie Ihre Benutzer nicht die Rechnung bezahlen und hören Sie auf, letzteres als Ausrede zu verwenden. Wenn letzteres der Fall ist, ist dann nicht die richtige Schlussfolgerung, dass netstandard ein Trugschluss ist, da für die Zukunft ohnehin nur die API von .netcore zählt?

Ich mache mir ernsthaft Sorgen um die Zukunft von .NET. Mein Unternehmen erstellt Tools für .NET Full und .NET Standard1.6. Das Letzte, was wir wollen, ist, dass die treibende Kraft der Richtung von .NET (die neuen Funktionen, die bald auf .NET full zurückportiert werden, wie in der .NET-Core-Ankündigung vor all diesen Monden gesagt wurde) die Dinge und das Ökosystem effektiv spaltet wird in zwei Hälften gespalten, da Fragmentierung tödlich ist.

Nichts in diesem Thread hat mich beruhigt, dass die Dinge für die Zukunft von _all_ .NET und dem Ökosystem, das benötigt wird, um es am Leben zu erhalten, in Ordnung sind: Ich sehe nur zwei Gruppen:

  • Menschen, die befürchten, dass die Optionen kompliziert werden, und sie haben ein schwieriges Problem vor sich
  • Microsoft, der einen Weg vor sich sieht: den .net-Core-Weg.

Diese beiden passen im Moment nicht zusammen. Kann jemand von Microsoft bitte eine kohärente Geschichte herausbringen, damit wir alle sehen können, was wirklich los ist, wie die Dinge wirklich sind, dh mit der Rückportierung von Funktionen nach .net full, was mit den fehlenden Myriaden von Dingen im .net-Kern getan wird (Sqlserver-Zeug, Transaktionsumfang, um nur einige zu nennen) und wie Microsoft glaubt, dass sie diese neue Richtung als solide, zuverlässige und verlässliche Plattform für die Zukunft verkaufen können, damit Unternehmen und große Teams sie ohne Bedenken wählen können.

Obwohl ich zustimme, dass all dies auf lange Sicht eine gute Sache ist, denke ich auch, dass es zu früh ist, die Unterstützung für das vollständige Framework mit 2.0 einzustellen.

Wir würden gerne so schnell wie möglich auf .NET Core umsteigen, aber leider sind unsere größten Blocker im Moment fast ausschließlich Microsoft-Bibliotheken (z. B. ist Entity Framework Core noch nicht gut genug, Azure Service Bus hat nur eine sehr frühe Vorschau).

Obwohl ich hoffe, dass die Azure-Bibliotheken in den nächsten Wochen/Monaten fertig sein werden, scheint es nicht so, als würde EF Core in absehbarer Zeit über genügend Funktionen verfügen.

Ich weiß nichts über die Interna von EF6, aber wäre es nicht mit vertretbarem Aufwand möglich, es auf netstandard abzuzielen? Dies würde einen großen Blocker entfernen ...

"Einfach auf 1.x zu bleiben" scheint keine gute Alternative zu sein, da es sicherlich viele Bibliotheken geben wird, die sich nicht darum kümmern (oder nicht über die Ressourcen/das Wissen verfügen, um beides zu unterstützen) und einfach ihre Abhängigkeit aktualisieren 2.0

PS: Ich bin sehr frustriert darüber, wie komplex das .NET-Ökosystem in den letzten Jahren geworden ist. Ich musste VIEL Zeit aufwenden, um all die neuen Dinge zu verstehen, und ich verstehe nicht, wie ein neuer Entwickler irgendetwas davon verstehen sollte. Aufgrund all dieser ziemlich extremen Breaking Changes gibt es jetzt sooo viele veraltete Informationen im Internet.
Auch die vielen unterschiedlichen Produktversionen (.net core, sdk, .net standard, ...) sind extrem unübersichtlich. Ich habe noch niemanden gesehen, der die .NET-Standardtabelle versteht, ohne eine 20-minütige Erklärung zu benötigen. 😞

Jeder, der .net Core mit der Vollversion des .NET-Frameworks verwendet hat, wurde einfach verarscht und muss zu MVC 5 zurückkehren

Ja. Ich verstehe die Argumentation, und ich nehme an, ich könnte sagen, ich hätte das kommen sehen sollen, aber es ist sehr frustrierend, dass dies ohne Vorwarnung über uns hereingebrochen ist.

Wir haben ein Anwendungsökosystem, wie viele andere, mit gemeinsam genutzten Bibliotheken, die ein Jahrzehnt und mehr zurückreichen, mehrere MVC 3-, 4-, 5-Apps, Konsolen-Apps, Windows-Dienste und Hunderttausende von Codezeilen. Wir sind nicht einmal in einer so schlechten Situation, um im Vergleich zu einigen anderen aufzurüsten.

Wir haben kürzlich ein paar neue Web-Apps mit ASP.Net Core 1.1 entwickelt, die notwendigerweise auf das vollständige 4.6.2-Framework abzielen. Diese Apps verwenden große Schwaden unserer bestehenden gemeinsam genutzten Bibliotheken. Wir haben eine peinliche Menge an Entwicklungszeit damit verbracht, uns mit project.json und dann mit der neuen .csproj-Datei zu beschäftigen und zu versuchen, alte und neue .csproj-Dateien in derselben Lösung zu mischen, und sind auf VS15 zurückgefallen, um Dinge mit alten .csproj-Typen zu erledigen, die kaputt sind System. Abhängigkeiten und eine Litanei von Assembly-Bindungsproblemen, Erstellungs- und Veröffentlichungsproblemen ... die Liste geht weiter und weiter.

Und jetzt hängen wir hoch und trocken in einer Sackgasse. Werfen wir ein paar Mannmonate der Entwicklung weg oder verbringen wir viele Male damit, zuerst nur festzustellen, was funktionieren könnte und was nicht, und dann herauszufinden, wie man ein Upgrade durchführen kann, und wenn das überhaupt möglich ist, tun wir es?

Ich kann nicht sagen, dass ich mit der Richtung und Notwendigkeit nicht einverstanden bin, aber eine frühere Kommunikation wäre wünschenswert gewesen.

Oh, und natürlich laufen die Azure Service Fabric-Bibliotheken auch nicht auf .NET Core – was für uns ein weiterer Blocker ist.

Ich würde sagen, Sie sollten das vollständige .NET-Framework unterstützen, bis Sie eine richtige .NET-Kerngeschichte innerhalb von Microsoft (und insbesondere Azure) liefern können.

@cwe1ss Diese Änderung wird jedoch einen Teil der Komplexität des .NET-Ökosystems verringern. Da Sie nicht zwei verschiedene Formate haben werden (ASP.NET Core + .NET Full und ASP.NET + .NET Core). Ich stimme den veralteten Informationen vollkommen zu, aber ich denke, das lässt sich nicht vermeiden, wenn Sie offen entwickeln, wie es Microsoft jetzt tut.

@davidfowl

Die Code-Sharing-Story über verschiedene .NET-Laufzeiten hinweg ist .NET Standard. Ihre Bibliotheken sollten versuchen, dies auf Code abzuzielen, der von .NET Core und .NET Framework gemeinsam genutzt wird.<

Aber das vollständige Framework, wie ich es verstehe, unterstützt nicht einmal den.net-Standard, also ist es wirklich kein nützlicher Standard.

Microsoft scheint die Wichtigkeit der Abwärtskompatibilität vergessen zu haben.<<

Das Problem ist, dass ASP.NET Core nie abwärtskompatibel sein sollte ... Deshalb gab es einen so großen Paradigmenwechsel von ASP.NET 4.x. Scheint so, als ob die Abwärtskompatibilität das wichtigste Bit für Sie wäre, ASP.NET 4.x auf .NET Framework zu verwenden. Das wird auf absehbare Zeit unterstützt und wird mit Sicherheitspatches versehen, solange Windows existiert.<

Sicherheitspatches sind nur ein Teil des Problems. Die Webstandards ändern sich so schnell, dass wir etwas haben müssen, mit dem wir die neuesten Standards verwenden können. So habe ich zum Beispiel irgendwo oben etwas über HTTPS v2 gesehen. Ich habe keine Ahnung, was das in der Praxis bedeutet, aber der Punkt ist, dass ich möchte, dass mein Framework diese Dinge unterstützen kann. Wenn ich gezwungen bin, bei einer älteren Version des Frameworks zu bleiben, egal ob es sich um v4 oder v1 handelt, werden die erforderlichen Dinge nicht unterstützt.

ASP .net Core wurde immer so vermarktet, dass es sowohl auf .net Core als auch auf dem Framework läuft. Wie andere gesagt haben, stört es mich nicht, wenn wir sechs Monate oder ein Jahr warten müssen, bis der Rahmen aufholt. Ich bin normalerweise sowieso ungefähr sechs Monate oder mehr im Rückstand. Was jedoch zu passieren scheint, ist, dass unsere bestehenden Investitionen vollständig aufgegeben werden, wie so viele andere Microsoft-Technologien, in die viele von uns Zeit investiert haben.

Stefan

@Rutix für „offenes Entwickeln“ wurde diese wichtige bahnbrechende Änderung überraschend leise ohne Ankündigung oder Umfrage durchgeführt (schließlich wurde dieses Problem von einem Community-Mitglied erstellt, das Pull-Anforderungen beobachtete).

Dinge im Stillen zu tun, hat Microsoft in der Vergangenheit gebissen, und sie scheinen nicht zu lernen. Und versuchen Sie nicht einmal, mir zu sagen, dass sie nicht sehen konnten, dass die Einstellung der vollständigen Framework-Unterstützung die Community stören und das Vertrauen und die Investition in die Plattform verletzen würde.

Der letzte Vorfall war https://github.com/dotnet/roslyn/issues/17054 , aber sie haben ihn schnell korrigiert, ich frage mich, wie das weitergehen wird.

Aber das vollständige Framework, wie ich es verstehe, unterstützt nicht einmal den.net-Standard, also ist es wirklich kein nützlicher Standard.

@stefanolson Das ist nicht richtig. Bibliotheken, die auf .Net Standard 1.x abzielen, können heute auf verschiedenen vollständigen Framework-Versionen ausgeführt werden. Bibliotheken, die auf .Net Standard 2.0 abzielen, sollen in der Lage sein, auf 4.6.1 ausgeführt zu werden, als ich zuletzt nachgesehen habe.

@Suchiman Da stimme ich dir voll und ganz zu. Ich bin ein bisschen enttäuscht, dass sie nicht zu lernen scheinen, wie man kommuniziert und Bomben auf die Community abwirft. Sie hätten damit besser umgehen können, wenn sie es zuerst angekündigt und eine Community-Diskussion geführt hätten.

Aber das vollständige Framework, wie ich es verstehe, unterstützt nicht einmal den.net-Standard, also ist es wirklich kein nützlicher Standard.

@stefanolson Das tut es. Unterschiedliche (vorhandene) Versionen von .NET Framework implementieren unterschiedliche Versionen des .NET-Standards. Siehe https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/

Ich weiß, dass ich mit diesem Thread etwas spät dran bin, aber hier sind zwei unserer Anwendungsfälle für die Verwendung von ASP.NET Core auf NetFX unter Windows:

Verwenden von ASP.NET zum Hosten einer REST-API für Ihre Anwendung

Unsere Anwendung ist eine Art Anwendung, die von einer .NET-API in eine REST-API umgewandelt wurde. Es wurde zuerst als .NET-API ausgeliefert und hat Abhängigkeiten zu allen Arten von Windows-Zeug.

Als wir eine REST-API hinzugefügt haben, haben wir die ASP.NET-Web-API ausgewählt, um sie zu hosten. Als klar wurde, dass die Web-API in ASP.NET vNext/5/Core vereinheitlicht wird, __und__ wir herausgefunden haben, dass __ASP.NET Core auf NetFX__ laufen würde, war es sinnvoll, ASP.NET vNext/5/Core zu verwenden.

Während wir .NET Core nutzen, um (einen Teil) unserer Anwendung auf Linux und macOS zu portieren, gibt es immer noch Windows-Abhängigkeiten, die nicht auf .NET Core ausgeführt werden (um eine Liste der Abhängigkeiten zu erhalten, die wir portiert haben, überprüfen Sie die CoreCompat.* NuGet-Pakete).

Um es kurz zu machen, wir sind jetzt auf ASP.NET Core 1.x fixiert, das für einen begrenzten Zeitraum unterstützt wird. Und dann was? Zurück zu ASP.NET 4?

Ich verstehe all die Leistungsarbeit, die Sie in anderen Bereichen von .NET Core leisten und Grenzen überschreiten, aber in meinem Anwendungsfall hoste ich keine hochvolumige internetexponierte Website, ich hoste eine REST-API, die dies tut bekommen wie was, 10-20 RPS max?

Visual Studio-Unterstützung

Wirklich, meine Visual Studio 2017-Erfahrung auf NET 4.x ist immer noch viel besser als .NET Core – ein gutes Beispiel dafür ist die Zeit, die es dauert, ein Testprojekt neu zu kompilieren und die neuen Tests im Testfenster anzuzeigen . Es ist viel schneller auf NetFX.

Am Ende haben wir eine Situation, in der wir heute parallel ein NetFX- und ein .NET Core-Projekt haben, das im Wesentlichen dieselbe Codebasis kompiliert. Der einzige Grund, warum wir mit dieser doppelten Wartung Schritt halten, ist die Leistung von Visual Studio bei .NET Core-Projekten (_insbesondere_ Komponententests und der Debugger).

Was mir im Nachhinein wirklich auffällt, ist, dass diese Änderung jetzt vorgenommen wird, ein paar Tage vor der Vorschauversion. Es scheint nur darauf hinzudeuten, dass es noch keinen technischen Grund dafür gibt – warum also nicht die Änderung in ASP.NET Core v3 vornehmen?

@mattnischan

@stefanolson Das ist nicht richtig. Bibliotheken, die auf .Net Standard 1.x abzielen, können heute auf verschiedenen vollständigen Framework-Versionen ausgeführt werden. Bibliotheken, die auf .Net Standard 2.0 abzielen, sollen in der Lage sein, auf 4.6.1 zu laufen, wie ich zuletzt gesehen habe.<

Es scheint mir, als würde asp.net core .net core nicht .net standard ausführen? Ich bin mir also immer noch nicht sicher, was der Sinn des .net-Standards ist – wenn er praktisch sofort nach seiner Erstellung aufgegeben wird.

Es wäre absolut sinnvoll, wenn der asp.net-Core den .net-Standard 2.1 erfordern würde, da es Dinge gibt, die sie benötigen, die derzeit nicht im Framework enthalten sind. Wir mussten also warten, bis das vollständige .net-Framework diese zusätzlichen Funktionen unterstützte, bevor wir die neueste Version des Asp.net-Kerns verwenden konnten. Das würde funktionieren und Sinn machen.

Aber stattdessen geben sie den Standard einfach auf und machen den Standard unbrauchbar (wenn ich diese verwirrende Situation richtig verstehe).

Also ... sein Build 2017 beginnt morgen; Ich kann mir vorstellen, dass das Team sehr damit beschäftigt ist, sich darauf vorzubereiten. Vielleicht einige Ankündigungen, vielleicht auch nicht. Vielleicht gibst du ihnen etwas Raum zum Atmen und triffst dich in einer Woche wieder?

Sehen Sie sich vielleicht die Sendung https://build.microsoft.com/ an (Mi 8:00 PST, 15:00 GMT und Do ähnlich?)

Vielleicht wissen wir mehr; nicht dürfen. Die Dinge können klarer sein, müssen es nicht. Das ASP.NET-Team wird jedoch wahrscheinlich etwas besser reagieren und sich mehr auf die Anliegen aller konzentrieren können. Obwohl @davidfowl sich tapfer geschlagen hat!

@stefanolson Aber stattdessen geben sie einfach den Standard auf und machen den Standard unbrauchbar (wenn ich diese verwirrende Situation richtig verstehe)

Ich denke, der Sinn von .NET Standard ist die Kompatibilität. Bibliotheksautoren können .NET Standard als Ziel verwenden und jeder kann es verwenden, unabhängig davon, ob er .NET Framework, .NET Core oder etwas anderes verwendet, das .NET Standard unterstützt.

Ich denke, der Sinn von .NET Core ist eine Neuinterpretation von .NET Framework. .NET Core ist plattformübergreifend, leistungsstark, Open Source und entwickelt sich schnell weiter.

Das standardmäßige Ändern der Implementierung von string in utf8 ist massiv und etwas, das Sie niemals in .NET Framework erwarten würden.

Nachdem ich diesen Thread gelesen habe, fühle ich mich:
.NET Core -> .NET Framework ist wie ASP.NET MVC -> WebForms.

Ich möchte auch den Werkzeugaspekt anführen. Die aktuelle Wiederherstellungs-/Build-/Test- usw. Leistung ist sehr schlecht und ein königlicher Schmerz. Wenn wir „bei 1.0 bleiben“ müssten, könnten wir immer noch neuere SDKs mit (hoffentlich) besserer Leistung verwenden oder würden wir bei einem 1.x SDK stecken bleiben?

Die Geschichte von .NET Core ist eine wunderbare Tour voller Höhen und Tiefen. Wir haben erst vor kurzem mit der Arbeit an ASP.NET Core begonnen, wegen all der vorherigen „Fuck-Ups“ (Versionierung, Benennung, project.json - .csproj-Übergang) und ich war (und bin) gespannt auf .netstandard 2.0, weil ich denke dies wird die erste "echte" Veröffentlichung sein.

Ich verstehe, dass ASP.NET Core 1.1 immer noch unterstützt wird und die nächsten 10 Jahre laufen wird, aber Sie sind super mutig, __das__ schnell zu bewegen und eines der früheren Verkaufsargumente von ASP.NET Core zu streichen.

Falls Sie wissen wollen, was von unserer Seite ein Blocker (abgesehen von Verzeichnisdiensten) ist: Wir verwenden immer noch EF6 und warten immer noch auf ein offizielles Open XML SDK NuGet-Paket, das auf netstandardwhatever abzielt.
Das Migrieren von Code kann sehr lange dauern...

Wäre es möglich, eine Art Prozess zu formalisieren, um netstandardXX basierend auf Änderungen, die in Core auftreten, voranzutreiben, was beinhaltet, dass es als Teil einer Wartungsphase der Veröffentlichung der Asp.Net Core-Bibliothek ins Visier genommen wird?

So wie es aussieht, habe ich eine WebForms/MVC-App, für die wir gerade einen Trigger auslösen wollten, um eine ANC-Web-API für eine SPA (und letztendlich für die Legacy-App von WebForms) verfügbar zu machen und aufzurufen, aber wir können sie deswegen nicht auf der CoreCLR entwickeln eine Abhängigkeit von Sybase (jetzt SAP) Ase ADO.NET -Treiber (wenn jemand, der dies liest, irgendwo bei SAP auf einen Knopf drücken könnte ... ich scheine leider überhaupt nichts darüber oder über Fehler zu hören, von denen ich seit über bekannt bin 9 Jahre jetzt).

Beim Lesen dieser Ausgabe bin ich mir nicht mehr so ​​sicher, was mein Weg sein soll. Das einzige, von dem ich zuversichtlich bin, dass ich planen kann, ist, dass es weiterhin einen fehlerhaften Treiber für das Desktop-Framework geben wird. Sollte ich die Änderungen an ASP.NET in den letzten Jahren ignorieren, weil sie Zeitverschwendung waren und ich einfach auf WebApi2 abzielen sollte? Soll ich sagen, fahren Sie mit ANC 1.x fort, in dem Wissen, dass ich wahrscheinlich nie migrieren und die Vorteile von 2.x in einer Anwendung sehen werde, von der ich glaube, dass sie hier für die nächsten 10-15 Jahre unterstützt wird (die WebForms-App hat migriert und gewartet wurden, seit das 1.1-Framework veröffentlicht wurde)?

@davidfowl

Span selbst hat eine portable Version, die überall läuft, ich bin mir nicht sicher, ob die schnelle Implementierung jemals sein wird
auf .NET Framework. Die APIs, die zu .NET Framework hinzugefügt werden und Span nutzen, können viel länger dauern als Span selbst, es ist umfangreich. Wann haben wir das letzte Mal String und Array in .NET geändert
Rahmen?

Warte was?

Nicht alle von uns sind Webentwickler. Wir haben jahrelang sehnsüchtig auf eine bessere Saitenbehandlungsunterstützung gewartet und jetzt sagen Sie uns plötzlich, dass wir SOL sind? Dass das .NET Framework und die unzähligen darauf aufbauenden Nicht-Web-Anwendungen niemals Zugriff auf auf Span basierende String-Handling-Bibliotheken erhalten werden?

Dies ist nicht mehr nur ein ASP.NET-Problem. Es steht im Mittelpunkt von Microsofts langfristigem Engagement für .NET Framework und seine Basisklassenbibliothek.

Weißt du, ich muss Leuten wie @davidfowl wirklich dafür danken, dass sie weiterhin allen antworten und allen, die zu dieser Diskussion beigetragen haben. Ich muss einiges von früher heute nachholen, aber ich habe das Gefühl, dass ich durch jeden Kommentar viel darüber lerne, wofür jeder .NET verwendet/zu verwenden hofft.

Ich denke, wir werden mit der Hilfe aller irgendwann einen oder mehrere Wege ebnen, und ich hoffe, dass alle Seiten berücksichtigt werden.

Ich warte gespannt auf die offizielle Ankündigung

Wenn ich es richtig verstanden habe, wird net coreapp 2.0 einen Kompatibilitäts-Shim bereitstellen, der es unseren ASP.NET Core 2.0-Projekten ermöglicht, von unseren alten NetFx-Klassenbibliotheken (z. B. net461) abzuhängen.
Wo finde ich weitere Informationen zu den derzeit geplanten Möglichkeiten/Einschränkungen eines solchen Compat-Shims?

@dgaspar Das ist nicht wirklich genau, so funktioniert es: netcoreapp2.0 unterstützt die meisten APIs in net461 . Wenn Ihre Bibliothek für net461 erstellt wurde und nur die APIs aufruft, die innerhalb der von netcoreapp2.0 unterstützten Teilmenge vorhanden sind, können Sie die Bibliothek trotzdem importieren (stellen Sie sich das als Überschreiben vor, das Sie besser wissen). und lass es laufen, da alle Klassen und Methoden, die es aufruft, dort sein sollten.

Jetzt gibt es auch einen Nachteil: Wenn die Methoden nicht vorhanden sind oder auf irgendeine Weise nicht vollständig unterstützt werden, erhalten Sie Laufzeitfehler für fehlende Methoden usw. Daher sind Überprüfungen zur Kompilierzeit dort keine gute Garantie. Es ist ein zweischneidiges Schwert, dessen man sich bewusst sein muss, aber einige Bibliotheken, die nie aktualisiert werden, sind dennoch mit den von ihnen aufgerufenen APIs in Ordnung.

@NickCraver erinnert sich noch jemand ...

"imports": [ "dnxcore50", "portable-net45+win8" ]

Ein verwandter Kommentar, den ich im Dezember gemacht habe. 11 Daumen hoch nach vorne getragen:

Hier ist etwas aus dem Ruder gelaufen. Ich vertreibe seit 15 Jahren C#-Apps. Ironischerweise verbringe ich immer mehr Zeit damit, tief in Interna einzudringen, um die ich mich früher nie kümmern musste, da Microsoft Abstraktionen auf höherer Ebene ausliefert. DU MACHST ES FALSCH.

Wenn ich zur Laufzeit von zufälligen Bibliotheks- und Paketverwaltungsfehlern überrascht werden wollte, die der Compiler nicht abfing, würde ich meine Apps in Ruby schreiben.

sogar node.js erlaubt es uns, alle Netfx-Bibliotheken einfach aufzurufen.

Der MVC-Code ist wirklich der einfache Teil. Es kann ein paar Wochen dauern, in node.js oder nancy neu zu schreiben, aber es wird viel länger dauern, Geschäfts- und Algorithmuscode zu portieren und zu beweisen, dass er genauso solide funktioniert wie der alte. ganz zu schweigen von dem Fall, wenn wir die Quelle nicht haben.

Nehmen Sie das Beispiel RyuJit, selbst nach der Veröffentlichung in der Produktion wurden blockierende größere Fehler gefunden, und es dauerte ein weiteres Jahr, bis sie vollständig behoben waren. Das Gleiche gilt für unsere Software, die keine Tierhandlungen sind, sondern industrielle Werkzeuge, die helfen, Millionen Dollar pro Tag zu verdienen.

Das UI-Framework ändert sich schnell, von Winform zu Web. aber Kerngeschäftslogik/-algorithmus sind viel stabiler und langlebiger. Um also das neue glänzende UI-Framework zu verwenden, müssen wir unseren Geschäfts-/Algorithmus-Code neu schreiben/erneut testen oder aufgeben? Nein, wir wussten, dass der neue Glanz in 5 Jahren durch etwas Trendigeres ersetzt wird, aber unser Geschäfts-/Algorithmuscode wird weiterhin verwendet.

@qmfrederik

Was mir im Nachhinein wirklich auffällt, ist, dass diese Änderung jetzt vorgenommen wird, ein paar Tage vor der Vorschauversion. Es scheint nur darauf hinzudeuten, dass es noch keinen technischen Grund dafür gibt – warum also nicht die Änderung in ASP.NET Core v3 vornehmen?

Als nächstes führen wir HTTP2-Unterstützung durch und es erfordert neue APIs.

Ich möchte auch den Werkzeugaspekt anführen. Die aktuelle Wiederherstellungs-/Build-/Test- usw. Leistung ist sehr schlecht und ein königlicher Schmerz. Wenn wir „bei 1.0 bleiben“ müssten, könnten wir immer noch neuere SDKs mit (hoffentlich) besserer Leistung verwenden oder würden wir bei einem 1.x SDK stecken bleiben?

Ja, das wird funktionieren.

@davidfowl

Als nächstes führen wir HTTP2-Unterstützung durch und es erfordert neue APIs.<

Also wird die Art von HTTP2-Unterstützung, die in asp.net Core 2.0 verfügbar sein wird, in 1.x nicht verfügbar sein? Dies ist wirklich die Art von Problem, über das ich mir Sorgen mache, wenn wir keinen Zugriff auf die neueste Technologie haben, weil wir aus irgendeinem Grund an das vollständige .net-Framework gebunden sind. Wie ich oben gesagt habe, spielt es keine Rolle, ob es sechs Monate bis zu einem Jahr dauert, bis dieser Filter zu dem durchdringt, was ich verwende, aber letztendlich nicht zu weit zurückbleiben möchte. Aufgrund von Codesharing und Bibliotheksnutzung durch Drittanbieter benötige ich in diesem Stadium das vollständige .net-Framework.

Zum Schluss stelle ich ein paar Dinge klar:

  • Wenn ich Legacy-Module sage, handelt es sich um DLLs, die von Netfx- oder C++/CLI-DLLs abhängen, die wiederum einige native DLLs hervorrufen können. sie sind für Geschäft/Algorithmus, kein COM, kein asp.net. sie sind nicht schlecht. Sie werden hauptsächlich deshalb veraltet, weil .net Core sie nicht ausführt.
  • es ist möglich, langfristig auf net core zu migrieren, und wir wollen es wirklich. aber es ist wirklich schwer, das zu erreichen. Es wird ein paar Jahre dauern, bis wir und Dritte da sind.
  • Die domänenspezifischen Bibliotheken sind viel langsamer als Mainstream-Bibliotheken für Tech-Stack-Änderungen. Wir alle kennen das Beispiel von Python 3. Diese domänenspezifischen Bibliotheken sind ein echtes Geschäft.

@danielcrabtree

Ich denke, der Sinn von .NET Core ist eine Neuinterpretation von .NET Framework. .NET Core ist plattformübergreifend, leistungsstark, Open Source und entwickelt sich schnell weiter.<

Was fantastisch ist. Die Herausforderung besteht darin, wie wir mit den vorhandenen Codebasen umgehen und wie wir diese mit .net Core nutzbar machen. Wenn WPF basierend auf .net Core verfügbar wäre, könnte ich .net Core überall verwenden. Da dies jedoch nicht der Fall ist und mein Code zwischen WPF und ASP.net geteilt wird, brauche ich eine Möglichkeit, sie zu teilen. Aber ich möchte nicht zu weit hinter den neuesten Webtechnologien und Sicherheitstechniken zurückbleiben, von denen sich die meisten (alle?) so anhören, als ob sie erst in 2.x und höher verfügbar sein werden

Einige Male in diesem Thread und in der Dokumentation an anderer Stelle wird .NET Core als plattformübergreifend beschrieben. Dies wurde als eines der wichtigsten Verkaufsargumente für den Wechsel zur Plattform beworben.

Dies scheint jedoch nicht der Fall zu sein, wie in diesem Gespräch auf Twitter klargestellt wird

https://twitter.com/James_M_South/status/861595907782987776

Und der obige Kommentar; Betonung von mir.

Die verbleibenden großen Lücken, die in .NET Core 2 fehlen, sind System.DirectoryServices und System.Drawing. Wir arbeiten an einem Windows-Kompatibilitätspaket, das beide in diesem Sommer auf .NET Core unter Windows ermöglichen würde.

Ich habe sehr hart mit .NET Core gearbeitet, seit ich sehr früh versucht habe, die Lücke zu füllen, die System.Drawing mit ImageSharp hinterlassen hat, und ich bin jetzt sowohl sehr verwirrt als auch mehr als ein wenig verärgert und frage:

Was ist .NET Core jetzt überhaupt?

Hier ist die Beschreibung aus den MS Docs .

.NET Core ist eine Allzweck-Entwicklungsplattform, die von Microsoft und der .NET-Community auf GitHub verwaltet wird. Es ist plattformübergreifend, unterstützt Windows, macOS und Linux und kann in Geräte-, Cloud- und eingebetteten/IoT-Szenarien verwendet werden.

Da ist wieder diese plattformübergreifende Aussage. Ist es oder nicht? Ich denke, der Versuch, dies festzunageln, führt zu viel Verwirrung in der Entwicklergemeinschaft.

Jede Beschreibung, die ich lese, scheint anders zu sein.

Können wir:

  1. Bitte lassen Sie sich irgendwo eine anständige, konsistente Botschaft aufschreiben, damit wir tatsächlich ein Ziel haben, das wir anstreben, und ein besseres Gesamtverständnis.
  2. Verschaffen Sie sich Klarheit über die aktuelle Roadmap für System.DirectoryServices und System.Drawing

Insbesondere System.Drawing ist sowohl verwirrend als auch besorgniserregend. Ich kann nicht nachvollziehen, warum Sie diese API jemals auf einer beliebigen Plattform auf .NET Core portieren möchten. Es ist schwierig damit zu arbeiten, wird auf dem Server nicht unterstützt und es fehlen viele kritische Funktionen, die für die moderne Entwicklung erforderlich sind (Multi-Threading, Pixelformate, ICC, EXIF, Quantisierung, indiziertes Png und so weiter).

Es gibt hier viele erkennbare Namen und Gesichter, und ich weiß, dass ich hier nur etwas Lärm hinzufüge, aber:

  • Verzeichnisdienste
  • Zeichnen (nicht dass ich es brauche)
  • EF

Dies scheinen die drei wichtigsten Dinge zu sein, die man auf den neuesten Stand bringen muss, bevor man eine so große Pause einlegt. Persönlich arbeite ich fast ausschließlich wegen EF6 auf net4x, da EFCore ... na ja ... :trollface:

@stefanson
Ich denke, von Ihnen wird erwartet, dass Sie den gemeinsam genutzten Code in eine .NET Standard-Bibliothek aufteilen. Dann kann es von WPF und ASP.NET auf .NET Framework und von ASP.NET auf .NET Core und anderen .NET Core-Anwendungen verwendet werden.

@JimBobSquarePants
Ich glaube nicht, dass das Windows Compat Pack Teil von .NET Core ist. Es handelt sich um eine Windows-spezifische Bibliothek, die auf .NET Core aufgesetzt wird. Sie können sich vorstellen, dass es eine Linux-spezifische Bibliothek gibt, die nur Linux-Funktionen verfügbar macht.

Ich denke, das Windows Compat Pack soll es einfacher machen, vorhandene .NET Framework-Codebasen zu migrieren. Sobald jemand zu .NET Core gewechselt ist, sollte er sich natürlich überlegen, zu besseren Lösungen wie ImageSharp zu migrieren.

@stefanson
Es ist möglich, dass sie sogar ein WPF-Paket nur für Windows erstellen könnten, mit dem Sie WPF-Anwendungen in .NET Core erstellen können, das jedoch nur unter Windows ausgeführt werden würde.

Dieses GitHub-Problem wurde auf einer deutschen IT-Nachrichtenseite erwähnt:
https://www.golem.de/news/asp-net-core-2-0-microsoft-veraergert-net-entwickler-mit-support-entscheidung-1705-127712.html

Danke @danielcrabtree , das ist das erste, was ich von Kompatibilitätspaketen höre.

Ich warte darauf, dass System.Xaml portiert wird.

@alexwiese nicht die Luft anhalten.

Ich warte darauf, dass System.Xaml portiert wird.

Mach weiter; Ich werde beißen. Wie verwenden Sie Xaml auf Ihrer Website?

Mach weiter; Ich werde beißen. Wie verwenden Sie Xmal auf Ihrer Website?

Plattformübergreifende Benutzeroberfläche (Bildschirmvorlagen, die von einer „Green Screen“-Konsolenanwendung, einer Xamarin-App und einer Angular-SPA gemeinsam genutzt werden), die auch für eine Geschäftsregel-Engine verwendet wird.

Wow, ok, Sie wandeln also das XML von XAML in irgendeiner Weise in HTML und Javascript um? In Ordnung 😄

Ich war mir nicht sicher, ob du nur trollst.

Ich mache dasselbe, aber realistisch gesehen sehe ich nicht, dass sie XAML portieren, wenn man bedenkt, dass es zu diesem Zeitpunkt nicht analysiert werden kann, ohne auch ausgeführt zu werden.

Wow, ok, Sie wandeln also das XML von XAML in irgendeiner Weise in HTML und Javascript um? In Ordnung 😄

Natürlich nicht; Ich konvertiere zuerst in JSON 😉

Ein weiterer Nachrichtenartikel zu diesem Thema, in dem viele von uns zitiert werden: https://www.infoq.com/news/2017/05/ASPNET-Core-2

@cwe1ss Der Autor ist @Grauenwolf

@alexwiese @yaakov-h Ich würde gerne einen Blogbeitrag darüber lesen; klingt ziemlich interessant und muss mit anderen Herausforderungen einhergehen, als ich es gewohnt bin.

Das ist wirklich schlimm. ASP.NET Core war ein vernünftiger Verkauf, wenn Sie bei Bedarf Legacy-Bibliotheken nutzen konnten. Falls dies mit den neuen Dingen möglich ist, optimieren Sie einige Dinge und zielen Sie auf .NET Core ab. Andernfalls zielen Sie einfach auf das gesamte Framework ab.

Mit dieser Änderung ist es ein Alles-oder-Nichts-Sprung. Und da Sie nicht immer alle Abhängigkeiten im Voraus verstehen, erhöht dies das Risiko.

Ich verstehe den Wunsch, sich schnell zu bewegen und sich dahin zu entwickeln, wohin die Dinge sowieso gehen müssen, aber Sie werden Ihre Benutzer zurücklassen. Menschen neigen dazu zu migrieren, nicht zu springen. Eine große Anzahl wird sich einfach nicht vom Strom lösen. Und wenn sie das tun, könnten sie durchaus auf eine ganz andere Plattform wechseln. Im Ernst, Sie unterschätzen dieses Risiko.

Dies ist ein Schritt, der irgendwann gemacht werden sollte, aber eher Ende 2019 oder frühestens 2020. Selbst dann möchten Sie immer noch ein langfristiges Modell, um diejenigen zu unterstützen, die sich entschieden haben, Dinge zu mischen.

Und nein, ASP.NET Core 1.x ist da einfach keine Antwort. Seine Unreife ist als Übergangsphase mit einem leichten Migrationspfad nach vorne in Ordnung, aber nicht geeignet, um langfristig damit zu leben. Es gibt einen großen Unterschied zwischen der Denkweise derjenigen, die eine solche Plattform entwickeln, und denen, die sie nutzen. Bitte überdenken Sie diese Richtung noch einmal.

@davidfowl Was ist mit so etwas wie edge.js für netcore? Es macht den API-Verbraucher für Plattformprüfungen verantwortlich, und eine stark typisierte Schnittstelle zwischen netfx und netcore ist für die meisten Szenarien ausreichend.

Wird diese Vorlage dann entfernt?

Es ist im Moment in VS2017 eingebacken.

image

Was für ein völlig inakzeptabler Blödsinn, wieder einmal beweist dies, dass es sich um eine Spielzeugtechnologie handelt, die noch nicht für die Hauptsendezeit und eine breite Akzeptanz bereit ist.

Ich weiß es wirklich zu schätzen, Jungs, ihr habt eine schöne Fahr- und Programmiererfahrung, ihr könnt in euren Blog-Einträgen und Twitter glänzen (hurra!), eure LinkedIn-Profile und Lebensläufe verbessern (hurra^2), alle Release-Partys vor euch, Mädels, Drinks und Das Zeug sieht vielversprechend aus, aber ... wer wird es verwenden? richten Sie sich an Unternehmen und möchten eine große Akzeptanz und eine solide Benutzerbasis? oder nur einige Startup-Hippies?!?

Dieser Kommentar zu "Full Span", das es möglicherweise nie in .NET Framework schafft, ist für mich ernsthaft besorgniserregend. Wenn Full Span nicht in .NET Framework enthalten ist, gehe ich davon aus, dass APIs, die es verwenden, es niemals in einen zukünftigen Netzstandard schaffen können, was es unmöglich macht, plattformübergreifende Bibliotheken zu schreiben, die Hochleistungs-Parsing verwenden oder verfügbar machen? Was bedeutet, dass wir mit unseren unsicheren benutzerdefinierten Implementierungen dauerhaft effektiv festsitzen ...

Sie erwähnen, dass Sie auf netstandard abzielen sollten, wenn Sie möchten, dass Ihre Bibliothek plattformübergreifend ist, aber was ist ASP.NET Core, wenn nicht eine weit verbreitete Bibliothek? Würden Sie anderen Bibliotheken empfehlen, die Unterstützung für netstandard einzustellen und zu .NET Core zu wechseln? Sollte die nächste Hauptversion von JSON.NET oder was auch immer netstandard fallen lassen? Es könnte sicherlich schnelles Parsing vertragen!

Hinweis Java hat es geschafft, Fast IO ohne Kopieren usw. auf abwärtskompatible Weise mit Netty (https://netty.io/) hinzuzufügen.

Abschließend möchte ich mich bei den Leuten bedanken, die bereit sind, herumzuhängen und diese zu beantworten. Wir freuen uns über die Antworten...

@shanselman Sich schnell zu bewegen ist ein edles Ziel, insbesondere für Teams, die größte Anstrengungen in die Kompatibilität stecken und Dinge auf kompatible Weise entwerfen, wie das ASP.Net-Team. Ich weiß, wie gerne sie ihre Problemdomäne vereinfachen würden, und ich unterstütze das, aber ...

Sich schnell und gleichzeitig „auch weg“ von Ihren Kunden zu bewegen, ist auch nicht gut. Wissen Sie, Ihre Kunden (mich eingeschlossen) haben eine Menge Legacy-Software und investieren viel Zeit in bestehende Apps und Bibliotheken. Sie können uns nicht einfach zurücklassen und an einen Ort gehen, wo wir nicht folgen wollen/können.

Sie sollten Ihre Kunden berücksichtigen, die nicht zu .Net Core wechseln können und von nun an mindestens noch einige Zeit Full Framework verwenden müssen. Wenn Sie sich von Full Framework entfernen, lassen Sie viele Menschen auf älteren Versionen festsitzen und schaffen eine große Spaltung in der .Net-Welt.

@JimBobSquarePants Ich unterstütze dich beim System.Drawing -Teil. Es gibt einige Diskussionen in den anderen Repos darüber, System.Drawing zurückzubringen. Basierend auf einigen Kommentaren in diesem Thread verstehe ich, dass es zuerst ein "Kompatibilitätspaket" für Windows und dann für alle Betriebssysteme für System.Drawing geben wird.

Ich frage mich, wie das aussehen wird und ob es auf Monos libgdiplus basieren wird oder nicht (was einige der Bedenken beseitigen würde, die Sie mit System.Drawing haben, aber das ist eine andere Geschichte).

Okay, so wie ich das sehe, gibt es ein paar Probleme:

  1. Dies wurde eher schlecht kommuniziert.
  2. Die Leute waren an der Entscheidung nicht beteiligt. Beachten Sie, dass es Microsoft natürlich freisteht, die gewünschte Richtung zu wählen, aber diese Art von großen Änderungen nicht mit der Community zu diskutieren, entspricht nicht dem Geist der Open-Source-Entwicklung.
  3. Es gibt kein "großes Schema", das die Gemeinschaft verwenden könnte, um diese Art von Entscheidungen zu prüfen. Zunächst war .NET Core eine abgespeckte, plattformübergreifende Version des vollständigen Frameworks. Dann, mit .NET Standard 2.0, schien es vielen, dass .NET Core 2 wie ein Drop-In-Ersatz für das vollständige Framework wäre, natürlich innerhalb angemessener Grenzen (kein UWP, WinForms usw.).
  4. .NET Core 2 wird einige wichtige Funktionalitäten verpassen, die im vollständigen Framework enthalten sind, wie System.DirectoryServices. Soweit ich das beurteilen kann, wurde dies anerkannt, aber vielleicht könnte der Weg zum Hinzufügen dieser Funktionen zu .NET Core deutlicher gemacht werden.
  5. ASP.NET Core 2 wird nicht auf dem vollständigen Framework ausgeführt, da dem vollständigen Framework neuere Features fehlen. Ich bin damit eigentlich völlig einverstanden. Wenn das Hinzufügen der fehlenden Funktionen zum vollständigen Framework übermäßig schwierig ist, dann tun Sie es nicht. Dass ASP.NET Core 2 nur auf .NET Core 2 ausgeführt wird, macht eigentlich ziemlich viel Sinn, obwohl die Erwähnung als ein Produkt wahrscheinlich nicht die beste Art war, ihre Beziehung zu beschreiben.

Was die Leute meiner Meinung nach wirklich gerne sehen würden, ist eine Beschreibung der Vision der .NET-Plattform. In welche Richtung wird es gehen? Wird das vollständige Framework nur Bugfixes und dergleichen erhalten, aber keine neuen Funktionen? Was wird getan, um fehlende Features zu .NET Core hinzuzufügen, und wann können wir damit rechnen? Wenn dies erklärt würde, würde dies hoffentlich viel dazu beitragen, die Angst zu lindern, die die Menschen jetzt empfinden.

@davidfowl Ich denke, es geht nicht nur um HTTP 2.0; Wenn es wirklich um HTTP 2.0 geht, könnten Sie nicht ASP.NET Core 2.0 als Ziel NetFX mit Ausnahme der HTTP 2.0-Unterstützung haben? Vielleicht sogar ein steckbares Modell, damit die Community HTTP 2.0 auf NetFX machen könnte, wenn sie es wirklich wollte?

@cokkiy @popcatalin81 @xprzemekw Wenn Sie nichts Konstruktives zu sagen haben, sehen Sie bitte von Kommentaren ab, diese Art von Kommentaren helfen niemandem.

Es gibt legitime Gründe, warum Sie den von @davidfowl https://github.com/aspnet/Home/issues/2022#issuecomment -300141134 beschriebenen Schritt machen sollten

Zu den Gründen, warum es verschoben wird, gehören (z. B. asp.net Core 3.0):

  • EF Core ist noch nicht bereit, EF 6.0 zu ersetzen, da viele Funktionen fehlen
  • keine Produktion bereit System.Drawing Ersatz
  • nein System.DirectoryServices
  • Es wurde office xml sdk erwähnt, aber das scheint bereits am 01.05.2017 auf netstandard verfügbar zu sein https://www.nuget.org/packages/DocumentFormat.OpenXml/
  • andere Pakete außerhalb des MS-Bereichs sind auf .net Core nicht verfügbar (nhibernate, verschiedene DB-Anbieter, ikvm)

Zu den Gründen, warum Sie es nie tun sollten, gehören:

  • Leute portierten Apps mit Legacy-Abhängigkeiten auf asp.net Core, ohne die Absicht, auf .net Core umzusteigen.
  • Sorgen Sie sich darum, netstandard hinter sich zu lassen und sich nicht viel darum zu kümmern.
  • Es ist unwahrscheinlich, dass einige Pakete von Drittanbietern jemals auf .net Core portiert werden (was sie wohl veraltet macht, aber das könnte nur meine Meinung sein)

Ein Beispiel für einen konstruktiven Kommentar wäre das Hinzufügen Ihres Grundes, warum Sie eines dieser drei Szenarien sehen möchten, oder das Vorschlagen einer alternativen Lösung. Wenn Sie nur Ihre Zustimmung/Ablehnung ausdrücken möchten, verwenden Sie die Schaltflächen "Reaktion".

@Kukkimonsuta

Leute portierten Apps mit Legacy-Abhängigkeiten auf asp.net Core, ohne die Absicht, auf .net Core umzusteigen.

Stimme voll und ganz zu. Denn Microsoft hatte angekündigt, dass ASP.NET Core sowohl auf .net Core als auch auf .net Frameworks funktionieren wird. Und es ist nicht fair, sie jetzt in AspNet Core 1.x zu belassen.

Die letzte Zusammenfassung ist ganz gut. Ich möchte nur ein oder zwei Dinge hinzufügen:

1.) Es sollte möglich sein, Windows-Dienste mit .NET Core zu schreiben (ich weiß, dass Daemons auf *NIX-Plattformen anders funktionieren). Die ServiceBase wäre also weiterhin nötig, und das hat zusammen mit EF hohe Priorität.

2.) Es sollte weiterhin möglich sein, eigenständige Dienste mit .NET Core zu schreiben und diese zusätzlich in Ihrer bestehenden, vollständig auf dem Framework basierenden .NET-Anwendung (dh einem kostenlosen Dienst aus Ihrer Windows Forms / WPF-App) zu hosten , um sie zu erweitern.

Letzteres ist wirklich für langsame Migrationsszenarien erforderlich, bei denen es nicht möglich ist, einen harten Schnitt zu machen und auf der grünen Wiese zu beginnen.

Stimme voll und ganz zu. Denn Microsoft hatte angekündigt, dass ASP.NET Core sowohl auf .net Core als auch auf .net Frameworks funktionieren wird. Und es ist nicht fair, sie jetzt in AspNet Core 1.x zu belassen.

Ich möchte auch noch einmal betonen, dass der große Wechsel zurück zu .csproj und msbuild hauptsächlich damit entschuldigt wurde, dass es nicht möglich wäre, (ASP).NET Core-Projekte aus Ihren bestehenden (Full Framework) .NET-Projekten zu referenzieren.

Diese Änderung macht letzteres unmöglich (zumindest für den größten Teil von ASP.NET). Warum also war Kompatibilität damals von größter Bedeutung (und verursachte viel Schmerz), ist es aber heute nicht (und verursacht wieder viel Schmerz)?

sorry ich muss auch betonen. Aber fast 500 Kommentare, ich glaube, wenn ich als Microsoft-Typ an diesem Problem beteiligt bin, hatte ich zwei Möglichkeiten:
1: Stummschalten des Problems
2: Denke über meine Entscheidung nach

@gingters Die csproj-Änderung galt jedoch hauptsächlich für _.net_ core, damit xamarin, asp.net, uwp und alle anderen Code gemeinsam nutzen und auch auf andere Projekttypen wie nativen Code verweisen können.

Außerdem ermöglicht es asp.net Core 2-Projekten, wieder auf vollständige Framework-Projekte über das Compat-Shim zu verweisen

@qmfrederik

Vielleicht sogar ein steckbares Modell, damit die Community HTTP 2.0 auf NetFX machen könnte, wenn sie es wirklich wollte?

Sie könnten es technisch. Aber anscheinend wollen sie das nicht. Ich habe das Gefühl, dass sie einfach nicht über die wirklichen Bedürfnisse von Unternehmen / großen Unternehmen nachdenken wollen, oder über Abwärtskompatibilität oder die Notwendigkeit, mit etwas anderem als Greenfield-Sachen fertig zu werden.

Und um ehrlich zu sein, zielte das Erwartungsmanagement in der Vergangenheit vollständig auf Unternehmen ab, die ihre Inhalte langsam plattformübergreifend erweitern/migrieren und gleichzeitig ihre bestehenden Apps langsam erweitern/migrieren möchten. Dieser Schritt ist also völlig unangepasst an das vorherige Erwartungsmanagement.

@ aL3891

damit xamarin, asp.net, uwp und alle anderen Code gemeinsam nutzen können

Jawohl. Exakt. Und dazu gehört auch die WPF/Windows Forms-App zur Verwendung von .NET Core-Bibliotheken, was jetzt unmöglich ist, wenn Sie zu .NET Core 2 wechseln möchten.

Könnte jemand genau erklären, warum zum Teufel diese Bibliotheken nicht auf netstandard2.0 abzielen können?

Bis jetzt habe ich netcoreapp als Spitznamen für eine plattformübergreifende ausführbare Datei betrachtet (nur in einem ausführbaren csproj-Projekt verwendet), aber ich habe es nie als Plattform betrachtet, jetzt sollte es als echte Plattform betrachtet werden? Warum warum warum und wie sind wir zu dieser absurden Option gekommen?

Ich verstehe den Grund und die Beweggründe dafür, auf netcoreapp2.0 zu zielen, aber ich denke auch, dass dieser Schritt sehr verfrüht ist. Das Ökosystem ist noch lange nicht fertig, einige sehr weit verbreitete Abhängigkeiten (einschließlich solcher, die wahrscheinlich in der Greenfield-Entwicklung verwendet werden sollen) zielen auf keinen Netzstandard ab, und es ist unklar, ob sie dies jemals tun werden. Ganz zu schweigen von den Microsoft-Paketen und SDKs, die nicht auf netstandard abzielen, einschließlich Sachen für Azure.

Nur um etwas zu sagen: Wäre es möglich, .NET Core 2.0 mit dem vollständigen Framework zu füllen, wenn es unter Windows ausgeführt wird? Es gibt bereits P/Invoke, also könnte es vielleicht eine Art NETFX/Invoke geben, schön verpackt hinter einem Fassadenpaket, um die API-Oberfläche zu füllen.

Letztendlich glaube ich nicht, dass irgendjemand von uns Dinge verwenden will, die auf net461 statt auf netstandard2.0 abzielen, es ist nur so, dass die Abhängigkeit es entweder nicht kann (fehlende API) oder gewonnen hat 't (verlassen, will nicht usw.) ändern. Und um dieses Problem zu lösen, müssen Sie den Paketentwicklern Zeit und einen sehr klar kommunizierten Plan geben, wann und welche Änderungen stattfinden, vielleicht sogar eine Anleitung, wie man den Netzstandard anvisiert.

@xoofx

Könnte jemand genau erklären, warum zum Teufel diese Bibliotheken nicht auf netstandard2.0 abzielen können?

Soweit ich es verstehe (korrigiert mich jemand, wenn ich falsch liege), weil das vollständige Framework (mindestens 4.6.1 ) netstandard 2.0 entsprechen soll, und es gibt Funktionen, die sie benötigen auf absehbare Zeit nicht im vollen Rahmen sein wird

Eine Sache, die ich interessant finde und die mit der ganzen Frage „Was ist die Vision?“ zusammenhängt. sind die häufigen Erwähnungen von System.Drawing .

Das finde ich interessant, weil Klassen (anders als zB Structs wie System.Drawing.Color) System.Drawing seit Jahren nicht mehr auf ASP.net unterstützt wird, zumindest seit den Tagen von .net Framework 3.5. Aus der Dokumentation:

Klassen im System.Drawing-Namespace werden nicht für die Verwendung in einem Windows- oder ASP.NET-Dienst unterstützt. Der Versuch, diese Klassen innerhalb eines dieser Anwendungstypen zu verwenden, kann zu unerwarteten Problemen führen, wie z. B. einer verringerten Dienstleistung und Laufzeitausnahmen. Eine unterstützte Alternative finden Sie unter Windows-Imaging-Komponenten.

Jetzt haben die Leute natürlich sowieso GDI+ verwendet, weil es in vielen Fällen funktioniert. Und ich bin nicht hier, um zu diskutieren, ob es eine gute Idee ist, sich auf nicht unterstütztes Verhalten zu verlassen oder nicht.

Aber ich frage mich, was die Vision jetzt für .net Core und ASP.net Core ist: Ist es eine Neuimplementierung der guten Ideen und die Entfernung des jahrelangen Cruft (auch bekannt als ".net - The Good Parts")? Warum sollte man in diesem Fall überhaupt System.Drawing einbinden?

Oder ist es im Grunde eine Neufassung des vollständigen .net-Frameworks, um plattformübergreifend zu sein, im Grunde ein besseres Mono?

Ich bestreite das nicht, ich würde es nur gerne wissen. Ich habe das Gefühl, dass die .net- und .net Core-Teams eine gründliche Recherche durchführen müssen, weil ich das Gefühl habe, dass es mit Ersterem begann und jetzt Letzteres ist.

Es macht mir nichts aus, auf .net Framework unter Windows zu bleiben (ich spreche hier von meinen eigenen Projekten, da ich keine Architektur für meinen Arbeitgeber treibe). .net Framework funktioniert wirklich gut und wird bis mindestens 2027 auf Windows Server 2016 unterstützt.

Auf .net Framework zu sein, bringt natürlich Kompromisse mit sich. Beispielsweise kam die HTTP/2-Unterstützung viel später als andere Web-Stacks und erforderte ein vollständiges Betriebssystem-Upgrade - korrigieren Sie mich, wenn ich falsch liege, aber meines Wissens gibt es keine Möglichkeit, HTTP/2 mit ASP.net unter Windows zu machen Server 2012 R2. Aber diese Kompromisse sind es wert für die starke Garantie, dass der Status quo für weitere 10 Jahre unterstützt wird.

Aber um das vollständige Framework für neue Entwicklungen in Betracht zu ziehen, würde ich gerne die Roadmap für ASP.net auf Full Framework sehen – was für ASP.net MVC 6, Web API 3, SignalR 3 usw. geplant ist. Ich möchte einfach nicht es sollte im Grunde das Visual Basic 6/Classic ASP(.net) dieser Generation sein.

Ich glaube, dass es in der Tat im besten Interesse von ASP.net Core ist, sich auf .net Core zu konzentrieren, weil es eine Menge guter Sachen gibt, die durch das schnelle Tempo ermöglicht werden, und ich fühle das zum ersten Mal seit Ewigkeiten, .net Core ist produktionsbereit, für Neuentwicklungen. Bewegen Sie sich schnell, innovieren Sie, machen Sie im Grunde das, was Node.js so erfolgreich gemacht hat (und denken Sie daran, dass sie ihr eigenes Stabilitäts-/Innovationsdrama hatten, siehe io.js).

Ich möchte allen aus dem Team danken, die hier kommentieren – dies ist ein langer Thread mit vielen verschiedenen Standpunkten, aber eine zivile Diskussion. Ich weiß, dass es für @davidfowl frustrierend sein muss, immer wieder zu fragen: „Also, was fehlt dir eigentlich, um zu portieren?“ und nur hilfreiche Antworten bis in diesen Thread bekommen.

Aber es ist auch eine wirklich berechtigte Angst und Frustration für Leute, die derzeit auf .net Framework arbeiten, zu _fühlen_, dass das aktuelle ASP.net im Grunde "fertig" ist und dass alle neuen Entwicklungen in ASP.net Core stattfinden werden, das nur auf einer Plattform laufen wird, die sie selbst verwenden möglicherweise nie in der Lage sein, dorthin zu wechseln - im Grunde das, was mit den Visual Basic 6-Leuten passiert ist, als ihnen gesagt wurde: "Wechseln Sie zu VB.net, oder finden Sie sich in ein paar Jahren gestrandet wieder".

Ich glaube, dass es viel einfacher ist, ASP.net Core 2.0 auf .net Core wirklich zu verdoppeln, um einen erstaunlichen Web Stack zu machen, wenn Leute, die es nie benutzen können, versichert sind, dass gute Teile daraus immer noch ihren Weg finden werden in ihren klassischen ASP.net-Stack.

Wie auch immer, genug von meinem Geschwafel. Es ist ein extrem schwer zu lösendes Problem für das Team, und ich beneide Sie nicht. Alles, was ich (und viele andere Leute hier) wollen, ist Klarheit darüber, wohin sich das Ökosystem als Ganzes entwickelt.

Soweit ich das verstehe (korrigiert mich jemand, wenn ich falsch liege), weil das vollständige Framework dem Netzstandard 2.0 entsprechen soll, und es gibt Funktionen, die sie benötigen, die in absehbarer Zeit nicht im vollständigen Framework enthalten sein werden

Danke! Ich möchte genau wissen, welche Funktionen? @davidfowl erwähnte HTTP2 als einen der Gründe? Wie kann ein Protokoll, das in eine wie auch immer getrennte System.Http2 -Assembly implementiert werden könnte, dazu führen, dass eine ganze .NET-Plattform verzweigt wird? Könnte jemand mehr Details über die vollständige Begründung geben?

@gingters , aber es ist nicht unmöglich, Bibliotheken können immer noch auf .netstandard abzielen und sowohl von 46 als auch von Core verwendet werden, es ist nur der asp.net-Core _selbst_, für den dies nicht der Fall ist.

Reposting, weil es vergraben und nicht verknüpfbar ist:

Wenn Sie also richtig verstanden haben, wird netstandard schließlich net framework ersetzen.

Nicht das ist nicht richtig. Ich bin mir nicht sicher, wie Sie zu diesem Schluss gekommen sind. .NET Standard ist immer eine Teilmenge aller Laufzeiten, die es unterstützen.

Ich möchte hier ein paar verrückte Sachen rauswerfen, weil es ein paar Mal erwähnt wurde. Was ich gleich sagen werde, hat keinen Einfluss darauf, was passieren wird, es ist an dieser Stelle alles Spekulation. Mehrere Leute haben gefragt, warum wir auf .NET Core statt auf .NET Standard abzielen wollen.

  • Wir haben Zeichenfolgen als eines der wichtigsten Dinge identifiziert, die wir in .NET Core angehen möchten. Es gibt unzählige Ideen, aber eine davon ist, dass Zeichenfolge standardmäßig utf8 ist (jede Menge Kompatibilitätsprobleme, aber folgen Sie mir hier).
  • Eine andere Sache, die wir beheben möchten, ist die Möglichkeit, billige Segmente von Arrays/Strings, jedes Stück zusammenhängenden Speichers, zu nehmen. Wir haben Span<T> hinzugefügt und betrachten Buffer<T> , um dies darzustellen. Es könnte bedeuten, dass String und Array neue Schnittstellen implementieren, die es ermöglichen, einen Slice zu nehmen, der eine 0-Zuweisung erfordert.
  • Dies führt zu neuen Methoden für String, die eine Aufteilung ermöglichen, bei der nicht jedes Mal ein Array zugewiesen wird.
  • Dies führt zu Überladungen von Int, UInt usw. (TryParse), die Span<char> und Span<byte> verwenden.
  • Dies führt zu neuen Codierungsroutinen, die Span<byte> .
  • Buffer<T> und Span<T> können Sie Speicher auf einheitliche Weise darstellen, und wir möchten den Netzwerkstapel aktualisieren, um die Übergabe vorab festgelegter Puffer zu ermöglichen, die Span<T> oder Buffer<T> .
  • Kestrel wird HTTP2 im 2.x-Zeitrahmen implementieren (derzeit auf 2.1 ausgerichtet) und das erfordert neue APIs im SSL-Stream, um ALPN auszuführen (https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation).
  • Http-Client auf .NET Core unterstützt Duplex-Streaming, wodurch es möglich wird, Streaming-Endpunkte über http in Signalr über eine einzige HTTP-Anforderung ohne Websocket zu implementieren.
  • Wir haben die Header-Parser-Implementierungen von HttpClient und System.Net.Http gegabelt und umbenannt (https://github.com/aspnet/HttpAbstractions/tree/d1d9bceff56cb44a194ae36923ce687e5e353006/src/Microsoft.Net.Http.Headers), damit wir sie verbessern konnten und lassen Sie sie sowohl .NET Framework als auch .NET Core unterstützen. .NET Core hat eine Kopie dieser Verbesserungen, die es nicht zurück geschafft hat, weil sie nicht verbessert werden mussten (wir konnten sie nicht nutzen).
  • Es gibt eine Reihe neuer Threading-Primitive, die eine neue API erfordern, die neue Szenarien erhellen wird, wenn wir sie nutzen können (https://github.com/dotnet/corefx/issues?q=is%3Aopen+is%3Aissue+ author%3Adavidfowl+label%3Aarea-System.Threading), das sind nur einige der Dinge, die ich persönlich eingereicht habe.

Ohne die Fähigkeit, die Kernprimitiven auf Touren zu bringen, werden wir ermutigt, sie zu forken und Dinge zu erschaffen, die wie sie aussehen, es aber nicht sind. Aus diesem Grund haben wir unsere eigene kleine BCL in ASP.NET Core https://github.com/aspnet/Common/tree/dev/src/Microsoft.Extensions.Primitives.

Das war nur eine zufällige Auswahl von Dingen, die wir in naher Zukunft tun sehen und die sehr grundlegende Teile von .NET betreffen.

Hallo zusammen, vielen Dank für eine sehr interessante Diskussion. Dieser Thread hat eine kritische Masse erreicht und einige der gleichen Fragen werden gestellt und erneut beantwortet. Ich verabschiede mich jetzt 👋 .

@ aL3891

Es ist nur der Kern von asp.net selbst, für den dies nicht der Fall ist

Was – nur zum Beispiel – das Hosten von ASP.NET Core 2 als Windows-Dienst beendet (da alle APIs in .NET Core fehlen und TopShelf nur auf dem vollständigen Framework ausgeführt wird). Was eigentlich eine ziemlich starke Einschränkung ist. Und verbietet auch das Hosten einer .NET Core 2-Diensterweiterung, die in Ihrer vorhandenen WPF-/Windows Forms-App gehostet wird, was ein häufiges Szenario in Integrationsanwendungsfällen mit Legacy-Apps ist.

Die schnelle Version von Span<T> , die nicht auf .NET Full verfügbar sein wird, ist wirklich seltsam: Wie wird Microsoft Roslyn dann beschleunigen? Sie haben eine schnelle Span<T> und begleitende Technologie, werden sie aber nicht in jeder Visual Studio-Installation auf dem Planeten verwenden, weil ... Politik? Weil es bei MS keinen Manager oben im Baum gibt, der mutig genug ist zu sagen: Wir müssen uns mehr Mühe mit .NET voll geben?

Aber lassen Sie mich nicht die Regenbogen- und Farbenmarketing-Blabla-Gespräche ruinieren, die später heute von //build verbreitet werden. Ich bin sicher, MS wird ein rosiges Bild zeichnen, dass alles in Ordnung ist und der Rest des Planeten immer noch in einer Höhle lebt.

@davidfowl Vielen Dank für Ihre Bemühungen hier, Ihre Erkenntnisse und Antworten haben sicherlich vielen Menschen geholfen. 👏

@gingters Es schränkt die Anzahl der Szenarien absolut ein, aber ich sage nur, dass der gesamte netstandard/csproj-Aufwand deswegen nicht verschwendet wird

@davidfowl Ich bin gerade über diese Nachricht gestolpert und sie ist ein bisschen beängstigend. Bis jetzt war ich zuversichtlich, dass ich, wenn ich die Kompatibilität mit .NETStandard 2.0 unterstützte, irgendwann zur Verwendung von ASP.NET Core 2.0 in meiner Anwendung wechseln könnte, während ich weiterhin das vollständige Framework ausführe. Wenn ich den Punkt nicht völlig verfehle, wird das nicht mehr möglich sein.

Ich habe gerade die neueste Version des API-Analyzers ausgeführt und es gibt eine Reihe fehlender APIs in .NET Standard 2.0, auf die ich angewiesen bin. Einige von ihnen kann ich loswerden (z. B. System.Configuration), auch wenn es mühsam ist.

Andere weiß ich noch nicht. Zum Beispiel verwende ich Laufzeitcodegenerierung und verlasse mich auf System.Reflection.Emit.ILGenerator, TypeBuilder usw. Und ich kann diese nicht einfach loswerden, sie sind ein Kernbestandteil des Produkts.

Ich habe mit dem API Analyzer weiter gegraben und es scheint, dass einiges davon von .NET Core 2.0 + Extensions abgedeckt wird, aber es fehlen noch die folgenden APIs:
M:System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.Collections.Generic.IEnumerable{System.Reflection.Emit.CustomAttributeBuilder})
M:System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.String)
M:System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName,System.Reflection.Emit.AssemblyBuilderAccess,System.String,System.Boolean,System.Collections.Generic.IEnumerable{System.Reflection.Emit.CustomAttributeBuilder})
M:System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(System.String,System.Boolean)
M:System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(System.String,System.String,System.Boolean)
M:System.Reflection.Emit.AssemblyBuilder.DefineVersionInfoResource
M:System.Reflection.Emit.AssemblyBuilder.Save(System.String)
M:System.Reflection.Emit.AssemblyBuilder.Save(System.String,System.Reflection.PortableExecutableKinds,System.Reflection.ImageFileMachine)
M:System.Reflection.Emit.ILGenerator.MarkSequencePoint(System.Diagnostics.SymbolStore.ISymbolDocumentWriter,System.Int32,System.Int32,System.Int32,System.Int32)
M:System.Reflection.Emit.LocalBuilder.SetLocalSymInfo(System.String)
M:System.Reflection.Emit.ModuleBuilder.DefineDocument(System.String,System.Guid,System.Guid,System.Guid)
M:System.Reflection.Emit.TypeBuilder.CreateType

Ich habe mich ein wenig in https://apisof.net/catalog umgesehen und es scheint, dass die Informationen dort von der Ausgabe des API-Analyzers abweichen, dh einige APIs, die der Analysator als nicht unterstützt markiert, werden dort aufgelistet (TypeBuilder.CreateType). Also, ich könnte okay sein, aber ich werde es nicht wissen, bis ich es versuche. Andere fehlen definitiv, zB der AssemblyBuilder.Save(...)

Fazit: Ich kann ASP.NET Core 2.0 nicht einfach in den vollständigen Framework-Stack einfügen und nur meine alten Abhängigkeiten beibehalten. Ich werde auch .NET Standard 2.0 nicht verwenden können. Stattdessen muss ich alles von Big Bang auf ASP.NET Core 2.0 portieren, da dies die einzige API ist, die fast alles abdeckt, was ich benötige. UND ich kann die neue Webanwendungsebene nicht auf ASP.NET Core 2.0 entwickeln, BEVOR ich migriere. Es ist also tatsächlich ein Urknall gefolgt von einem WIRKLICH Urknall.

@davidfowl Danke für die Details.

Ich bin voll und ganz für .NET Core und .NET Full Framework ist mir eigentlich egal ... Aber ich habe mich nur um netstandard2.0 gekümmert, weil es den größten Teil der .NET Full Framework API mitbrachte, und die Version 2.0 als „Junction“-Version, dh um Leuten zu helfen, ihren Code von .NET Full zu .NET Core zu migrieren … aber ich hatte nicht wirklich erwartet, dass sie an den sich langsam entwickelnden Pfad von gebunden sein würde das vollständige Framework für immer ... aber es hört sich so an, als würde netstandard2.0 doch das neue PCL sein ...

Also fair genug, das .NET Full Framework braucht jetzt wirklich einen Ruhestandsplan ( System.Drawing hält Sie zurück? Komm schon, SkiaSharp ist besser und plattformübergreifend) und lass .NET Core 2.0 sich weiterentwickeln sein eigenes volles Tempo!

@davidfowl Ursprünglich sollte Net Core in Bezug auf die API eine Teilmenge des vollständigen Frameworks sein, das auf allen Plattformen ausgeführt wird, und alle API-Änderungen in Bezug auf Core sollten auf beiden vorgenommen werden. Das war zumindest das anfängliche Versprechen ... mit dieser neuen (aus dem Nichts) Richtung sieht es jetzt ganz anders aus.

Die Dinge, die Sie erwähnt haben, sind alle großartig, ich hätte sie jetzt gerne, aber auf Full Framework, wo sie dringend benötigt werden, arbeite ich derzeit an einer WPF-App, in der Spanund verwandte APIs wären ein Geschenk des Himmels, wir haben derzeit benutzerdefinierte TryParse-Routinen für datetime und timespans und primitive Takeing-Indizes, die ein Support-Albtraum sind, weil sie kulturbewusst sein müssen.

Es ist völlig verständlich, dass Sie das Framework weiterentwickeln möchten. Was nicht verständlich ist, ist, warum Sie diese Trennung mit bestehenden Kunden schaffen und sie auf einer jetzt sterbenden Plattform festsitzen lassen? Vollständiger Rahmen?

@popcatalin81 (Bevor die Dinge zu sehr vom Thema abweichen, aber auf die Gefahr hin, ein Mansplainer zu sein) - SpanEs geht darum, Speicher ohne Zuweisungen zu verschieben, es hat nichts mit DateTime zu tun.

@popcatalin81 mit netstandard2.0 Ich bin mir ziemlich sicher, dass wir erwarten könnten, dass sogar WPF und System.Drawing auf .NET Core laufen (nur Windows, sie würden offensichtlich nicht auf Nicht- Windows-Plattform ... ), afaik, diese Bibliotheken verwenden keine CLR-Spezialfunktionen ... sie müssten nur mit netstandard2.0 neu kompiliert werden ... (nur der .NET-Teil, der native Teil wäre dasselbe - WPF-Kompositionsmodul oder direkte Aufrufe von Win32-Funktionen für System.Drawing ...)

Ich habe die gesamte "Core"-Reise nicht so genau verfolgt, wie ich es vielleicht hätte tun sollen, und daher gibt es ein paar Dinge, die für mich wirklich auffallen.

Es schien, dass das ASP.NET-Team anfangs allen anderen vorauseilte (oder zumindest beschuldigt wurde), dann zurückgedrängt wurde und sich nun aus den bereits genannten Gründen wieder befreien muss. Ist das eine faire Einschätzung?

Wenn dem so ist, scheint es, dass viele der Schwierigkeiten, mit denen man jetzt konfrontiert ist, vorhersehbar waren und dass ein neues modernes ASP.NET / .NET von Anfang an eine eigenständige Sache hätte sein sollen.

Das Hauptproblem, das ich in diesem Thread sehe, ist, dass Menschen auf der Grundlage von Versprechungen und Annahmen, die nicht mehr zutreffen, erhebliche Investitionen getätigt haben.

Es fühlt sich an, als hätte vieles davon vermieden werden können.

Bin ich weit weg von der Basis?

@davidfowl @DamianEdwards @shanselman

Ich habe einige wenige ASP.NET Core 1.x-Apps in Produktion, die auf net462 abzielen, weil sie die Funktionalität bereitstellen und die unten stehenden Namespaces verwenden. Ich kann die Namespaces in der Netstandard2.0-Work-in-Progress-API-Referenz nicht sehen.

1. ADFS-Integration:

• System.IdentityModel.Protocols.WSTrust
• System.IdentityModel.Tokens
• System.ServiceModel
• System.ServiceModel.Sicherheit

2. Atom / RSS-Feed-Generierung:

• System.ServiceModel.Syndication

Ich möchte diese vorhandenen Apps in Zukunft auf netcoreapp2.0 ausrichten. Was wäre meine beste Vorgehensweise in jedem Fall? Habe ich beispielsweise ein vorhandenes NuGet-Paket verpasst oder sollte ich auf eine zukünftige Version warten?

Es gibt viele Dinge, die mich zum Full Stack zwingen, ironischerweise die meisten davon Microsoft-Technologien. CRM Dynamics SDK, Azure SDKs, XLST-Namespace-Unterstützung, Headless-ADAL-Anmeldung (nur im Full-Stack verfügbar) usw.

Diese Änderung wird eine bereits winzige Entwicklerbasis, die mutig/dumm genug ist, .Net Core frühzeitig zu übernehmen, nur noch weiter trennen.

@davidfowl

Als nächstes führen wir HTTP2-Unterstützung durch und es erfordert neue APIs.

Ich verstehe diesen Punkt nur teilweise. Für HTTP/2 ist der Hauptblocker die ALPN-Unterstützung für TLS, daher können wir sie derzeit nicht haben. Allerdings wird dies auch nicht rechtzeitig für .NET Core 2.0 geschehen, heißt es in den Kommentaren zur zugehörigen Anfrage im CoreFx-Repo. Erst später (2.2? 3.0?) Was bedeutet, dass es aus HTTP/2-Perspektive keine Rolle spielt, ob ASP.NET Core von Corefx 2.0 oder .netstandard 2.0 abhängt - es würde sowieso nicht funktionieren. Erst später, wenn die Versionsnummer wieder erhöht wird.

Abgesehen davon betrifft das HTTP/2-Problem hauptsächlich den Webserver (Kestrel) und nicht das gesamte Framework. Abgesehen von dem Grund "es ist hässlich, mehrere Dinge zu warten", sehe ich keinen Grund, warum man keinen Webserver ohne HTTP/2-Unterstützung für den .NET-Standard und einen mit ihm für zukünftige .NET-Core-Versionen haben könnte.

@davidfowl Es gibt eine Sache, die in dieser ganzen Diskussion nicht wirklich behandelt wurde. Ich verstehe den technischen Hintergrund voll und ganz und stimme Ihrer Argumentation voll und ganz zu. Insbesondere stimme ich zu, dass es eine technisch machbare Lösung sein wird, auf 1.x (möglicherweise mit einem erweiterten Support-Zeitrahmen) zu bleiben, insbesondere wenn derzeit fehlende Schmerzpunkte wie SignalR in Zukunft mit 1.x-Unterstützung hinzugefügt werden für die Mehrzahl aller hier diskutierten Fälle.

Das Problem ist jedoch nicht technischer Natur, sondern psychologischer Natur. Wie einige hier bereits angemerkt haben, steckt die Einführung von ASP.NET Core noch in den Kinderschuhen. Denken Sie an die Botschaft, die Sie senden möchten: Sie werden bald eine 2.x-Version veröffentlichen und dann höchstwahrscheinlich sofort mit der strategischen Planung für Version 3.x beginnen, alles offen (was normalerweise eine gute Sache ist). Eine Folge davon wird sein, dass, auch wenn es für die meisten Menschen keine zwingende Anforderung gibt, 2.x zu verwenden, und obwohl Sie möglicherweise eine vernünftige technische Lösung bieten, indem Sie 1.x unterstützen, in den Köpfen der Menschen die Idee der aktiven Migration einer bestehenden auftritt Lösung für "eine Version 1", wenn bereits an Version 3 gearbeitet wird, wird eine sofortige und inakzeptable psychologische Hürde sein. Es besteht die reale Gefahr, dass dies zu einem Henne-Ei-Problem führt, bei dem Benutzer vorhandene Projekte nicht auf ASP.NET Core migrieren und Bibliotheksautoren ihre Inhalte nicht auf .NET Core portieren, weil es nicht genug Nachfrage und Druck gibt, was effektiv wird verlangsamen die Adoptionsrate sogar noch mehr, für eine potenziell lange Zeit.

Wie einige auch erwähnt haben: Anscheinend haben viele Leute, auch wenn sie wussten, dass dieser Schritt kommen würde, nicht damit gerechnet, dass diese Kürzung so bald erfolgen würde. Darüber hinaus haben wir im Laufe der letzten Monate viele Vorträge, Interviews und Beiträge darüber gehört und gelesen, wie 2.x (.NET Core, .NET Standard usw.) die Dinge stabilisieren und vereinheitlichen wird. Daher ist „2.x“ in vielen Köpfen zum Äquivalent für „ausgereift“ geworden, egal wie technisch begründet dieser Anspruch sein mag oder nicht. Die Art und Weise, wie Sie Begeisterung für 2.x aufgebaut haben und jetzt kurzfristig ein Kernfeature von 1.x wegnehmen, war ein äußerst unglücklicher Schritt, der höchstwahrscheinlich die Argumentation von der technischen zu einer emotionalen Argumentation verlagert hat, auch wenn oberflächlich betrachtet scheint es immer noch so, als würden wir hier nur technische Details diskutieren. Es wird sehr schwierig für Sie, diese Wahrnehmung zu ändern und ein breites Vertrauen in 1.x als solides Migrationsziel zu ASP.NET Core wiederherzustellen.

Meine persönliche Empfehlung wäre, 2.0 als letzte Hauptversion zu veröffentlichen, die das .NET Framework unterstützt, aber anstatt ein weiteres Jahr oder länger zu brauchen, um diese Unterstützung einzustellen, wechseln Sie viel schneller zu 3.x. Verwenden Sie 3.x für all diese technischen Funktionen, die im Hinblick auf die Abwärtskompatibilität nicht möglich sind, und beginnen Sie mit der Arbeit an 3.x, sobald 2.0 draußen ist. Dadurch erhalten Sie mehrere Vorteile auf einmal: Sie können Ihren ursprünglichen Supportplan für 1.x beibehalten. Die Leute erhalten .NET-Unterstützung in 2.x, das sich in ihren Köpfen in den letzten Monaten als "die ausgereifte" Version entwickelt hat. Sie können mit Zuversicht auf das „Neueste und Beste“ migrieren, da sie sich jetzt der Tatsache bewusst sind, dass 3.x diese Unterstützung einstellen wird, und genügend Zeit haben, ihre Migrationsstrategien bei Bedarf zu planen. Und Sie müssen nicht langsamer werden (oder nur für sehr kurze Zeit), indem Sie neue Funktionen hinzufügen und ASP.NET Core so schnell weiterentwickeln, wie Sie möchten.

Auch dieser Vorschlag unterscheidet sich nicht so sehr von dem, was Sie derzeit sowieso tun möchten, nur mit einer anderen Versionierung des Ninjutsu. Die Tatsache, dass diese Änderung kürzlich vorgenommen wurde, impliziert, dass dies technisch nur ein kleiner Rückschritt wäre, bis Sie wieder in der Lage sind, wieder Vollgas zu geben, aber es würde diesen psychologischen Problemen gut ausweichen.

/cc @DamianEdwards @shanselman

und kündigen Microsoft Shrink beim Build an. (Entschuldigung, ich konnte nicht widerstehen)
Während ich @MisterGoodcat in allem über das WARUM zustimme, frage ich mich, brauchen wir wirklich Microsoft, um unsere emotionalen Fehler/Bedürfnisse zu bewältigen?

.NET Framework ist seit Jahren stabil, aber langsam, und als Betreuer von fast jeder Art von .NET-App stimme ich zu, dass etwas dagegen getan werden muss, und vielleicht sogar, dass es „aus seinem Elend befreit“ wird Eine Option in der Fülle der Zeit, jetzt, da Microsoft sich entschieden hat, .NET Core anstelle anderer Optionen zu salben. Aber dieses Problem zeigt, wie blind Microsoft dazu neigt, dass vergangene Anstrengungen nicht automatisch übernommen werden.

Für ein Unternehmen, das für seinen Fokus auf Entwickler und Entwicklertools bekannt ist, ist es unglaublich kurzsichtig, dass Microsoft Blocker nur in Form seiner eigenen Abhängigkeiten verlangt. Es überrascht mich nicht, dass DirectoryServices und Drawing die beliebtesten Blocker sind, aber das bedeutet nicht, dass es nicht die Mutter aller langen Schwänze von internen Komponenten, Komponenten von Drittanbietern und COM-Interop gibt, die entweder unmöglich, unpraktisch oder enorm teuer sind ( insbesondere in Form von Upgrades) für die Fahrt mitzubringen.

Ich verstehe das Argument, dass Microsoft nach seinen eigenen Sachen aus der BCL oder dem erweiterten .NET Framework (WCF usw.) fragt, um sicherzustellen, dass sie selbst an den richtigen Sachen arbeiten, aber die gleiche Frage sollte nicht die Entscheidungsgrundlage dafür sein Bewegen Sie die gesamte Plattform. Wenn der Plan war, .NET Framework irgendwann fallen zu lassen, warum sollte man das nicht kommunizieren? Und wenn die Entscheidung erst kürzlich getroffen wurde, warum sollte man das nicht gleich mitteilen? Sprechen Sie mit uns und lassen Sie sich beraten! Ich verstehe, dass nicht jeder von uns qualifizierte Analysen geben wird, aber wenn ich MVPs in diesem Thread sehe, Ihre leidenschaftlichsten Unterstützer und aktivsten Benutzer, die davon überrumpelt werden, bin ich nicht wirklich zuversichtlich, dass Microsoft sich auch nur im Geringsten um seine Kunden kümmert .

Und ich verstehe auch das Argument, dass es mir leicht fällt, „Microsoft“ zu sagen. Ich weiß, dass es aus einzelnen Menschen besteht, die keine unendliche Kapazität haben. Aber ich verlange keine herkulischen Anstrengungen von einem stählernen Monolithen – ich verlange Kommunikation, Ehrlichkeit, Respekt. Wenn Sie all die Zeit an diesem Produkt arbeiten und Änderungen vornehmen möchten, die sich auf Ihre Kunden auswirken, bitte ich Sie, sich mit Ihrer Community zu beschäftigen, anstatt die Würfel zu würfeln. Wir schreiben Artikel für Sie, wir wählen Ihre Plattform aus, wir pumpen es, wenn Sie etwas richtig machen (wie die Leute über den ganzen Leistungsschub informieren, zu dem Ben Adams, ein unbezahltes Community-Mitglied, unauslöschliche Beiträge geleistet hat), wir sehen uns Community-Standups an. Aber das geht in beide Richtungen. Verwenden Sie uns als mehr als ein Megaphon, und wir reagieren möglicherweise nicht auf diese Weise.

@Bartmax Entweder das oder jedem einen obligatorischen 2-Stunden-Kurs in den Unterschieden von Core, Asp.net Core, Asp.net Core Non-Core, Netstandardbanana, .net, system.web. asp.net 5 (ich meine 6).
Und beginnen Sie damit, Roadmaps und Absichten klarer zu kommunizieren.

Es ist immer noch keine Lösung für diejenigen, die den vollen Rahmen nie loslassen können. Irgendwann werden wir mit zwei Gemeinden enden.

In einer perfekten Welt wäre der Kern von asp.net schneller und hätte vielleicht sogar einige exklusive Funktionen, die für .net nicht verfügbar sind. Aber das meiste Zeug wäre Netstandard, und alles andere würde zumindest für die absehbare Zukunft crosskompiliert werden. Und die Leute können den Kern lernen, denn wenn sie an einem Legacy-Projekt arbeiten müssen, wäre der einzige Unterschied der Bootstrapping-Teil anstelle des gesamten asp.net-Teils.

Wenn Sie nicht sehen, wie jemand ein normaler asp.net-Entwicklershop ist, können Sie darauf vertrauen, dass dies voranschreitet.

Als jemand, der einige C++/CLI-Bibliotheken verwenden muss, lässt mir diese potenzielle Änderung grausame Optionen:

1) Bleiben Sie für immer bei der aktuellen stabilen asp.net-Kernversion, ohne jemals die Chance zu haben, neue Funktionen oder Sicherheitsfixes zu nutzen.

2) Investieren Sie eine Menge Zeit (und letztendlich Geld), um all diese C++/CLI-Bibliotheken zu ersetzen, für die kein Kunde jemals einen einzigen Cent bezahlen möchte.

3) Abandon asp.net Core insgesamt

Ich kann verstehen, dass diese Änderung in Zukunft notwendig ist und bin dafür. Was ich nicht verstehen und akzeptieren kann, ist der Zeitrahmen. Etwas in dieser Größenordnung würde man ein Jahr im Voraus als Roadmap-Ziel als bevorstehende Breaking Change in der Version 3.x oder sogar 4.x ankündigen und es nicht in die nächste Version kippen ....

@davidfowl Was ist mit so etwas wie edge.js für netcore? Es macht den API-Verbraucher für Plattformprüfungen verantwortlich, und eine stark typisierte Schnittstelle zwischen netfx und netcore ist für die meisten Szenarien ausreichend.

Für mich sieht das nach einer idealen Lösung aus:

1) Kein Rätselraten, ob Ihr netfx-Code unter netcore ausgeführt wird - er verwendet die netfx-Laufzeit im Prozess
2) Hält Core nicht zurück
3) Wenn neue Kern-APIs so populär würden, dass Entwickler die Unterstützung für die niedrigstmögliche Version von netstandard einstellen würden, was im netfx-Bereich nicht der Fall ist, könnten Sie eine Brücke für die entgegengesetzte Richtung schlagen

Für diejenigen, die einen ASP.NET Core mit zwei Plattformen vorschlagen, einen, der auf altem .NET ohne die glänzenden neuen String- und Span-Funktionen läuft, und einen auf .NET Core 2 mit diesen Funktionen ... nun, ich würde vorschlagen, es zu nehmen einen Blick durch den Code.

Auf der einfachsten Ebene kann jedes Web-Framework:

  • nimmt Byteblöcke, die UTF8-codierte Zeichenfolgen (_BOBTRUES_) darstellen, interpretiert sie und übergibt sie als stark typisierte Objekte an Ihren Code
  • nimmt die Ergebnisse Ihres Codes und wandelt sie zurück in _BOBTRUES_.

Es macht also Sinn, dass Sie wirklich, wirklich, wenn Sie ein Web-Framework erstellen, Low-Level-Primitive brauchen, die _BOBTRUES_ verstehen, nicht wahr?

Und wenn der größte Teil des Codes, den Sie schreiben, von _BOBTRUES_ abhängig ist, Sie aber auch eine andere Laufzeitumgebung unterstützen müssen, die keine Ahnung hat, was _BOBTRUES_ sind, dann schreiben Sie diesen ganzen Code zweimal, alles übersät mit Compiler-Direktiven oder komplizierten Build-Dateien . Und Sie müssen den ganzen Code doppelt schreiben und bearbeiten, während Sie gleichzeitig versuchen, Ihr Web-Framework _fantastisch_ zu machen, solange es nicht nur dauert, bis das vollständige .NET dazu kommt, _BOBTRUES_ zu verstehen, aber auch Mono, UWP, Xamarin, Unity3D und alles andere, das den NETStandard implementiert, dem Sie _BOBTRUES_-Anforderungen hinzufügen, von denen sich viele von vornherein nicht wirklich um _BOBTRUES_ kümmern.

Der einzige Grund, warum Sie diesen ganzen Code zweimal schreiben müssen, ist natürlich, dass es eine Reihe von Paketen von Erstanbietern und Drittanbietern gibt, die beides sind

  • System.Drawing, System.DirectoryServices usw. oder
  • Warten auf NETStandard 2.0, weil 1.x die benötigten APIs fehlen, oder
  • von Leuten gepflegt, die keine Zeit oder Motivation haben, auf NETStandard umzusteigen
  • verlassen, bzw
  • abhängig von Upstream-Paketen, die eines der oben genannten sind

Abgesehen von den System.*-Bits für viele der anderen Pakete, macht es vielleicht das Wissen, dass ASP.NET Core-Benutzer auf vollständigem .NET laufen können, das Aufschieben der Portierung auf NETStandard ein bisschen einfacher zu rechtfertigen? _„Ja, wir unterstützen ASP.NET Core, aber vorerst nur auf vollständigem .NET...“_ Für Leute, die .NET Core-Apps in Linux-Containern ausführen müssen oder sie auf Macs entwickeln möchten, ist das genauso frustrierend , und es gibt keine Problemumgehung „vorerst nur auf Version X bleiben“. Es gibt einfach kein NHibernate, kein OData, kein EF6, nichts.

Wenn dies also der Kick in die Hose ist, den Teams innerhalb und außerhalb von Microsoft benötigen, um ihre Pakete ordnungsgemäß auf NETStandard 2.0 zu migrieren, damit sie von _allen_ ASP.NET-Entwicklern* verwendet werden können, nicht nur von denen, die vollständig auf Windows-Servern laufen .NET, dann ist das eine _gute Sache_.

*Denken Sie daran, dass ASP.NET Core 2.0, das auf .NET Core 2.0 ausgeführt wird, keine NETStandard-Pakete _veröffentlichen_ muss, um sie _verbrauchen_ zu können.

Der Kommentar an @JamesNK , dass er nur einen Parser geschrieben hat, ist wirklich klasse, besonders wenn man bedenkt, dass Sie Ihren eigenen Parser für seinen fallen gelassen haben. Welches er in seiner eigenen Zeit geschrieben hat, um Ihre Plattform voranzubringen.

Ja, der volle Stapel bewegt sich langsamer, aber das bedeutet auch, dass Sie Zeit haben, das Framework kennenzulernen. Es gibt noch viel zu tun im normalen Rahmen, also verstehe ich nicht wirklich, warum wir so etwas wie .Net Core brauchen, um ehrlich zu sein. Wenn Cross-Plattform ein Problem ist, haben Sie gerade Xamarin gekauft und sie führen .Net auf fast allem aus. Darunter eine freaking Uhr.

Vielleicht ein Fahrplan?

Wir können den Quellcode unserer Großväter nicht lesen und wir können ihre Algorithmen nicht verstehen und wir waren über Nacht unwissend! .
Was wird passieren, wenn Asp.net Core kommt, Bruder, Kılıçdaroğlu hat keine Führungsqualitäten.

Wenn dies also der Kick in die Hose ist, den Teams innerhalb und außerhalb von Microsoft benötigen, um ihre Pakete ordnungsgemäß auf NETStandard 2.0 zu migrieren, damit sie von allen ASP.NET-Entwicklern* verwendet werden können, nicht nur von denen, die vollständig auf Windows-Servern laufen .NET, dann ist das eine gute Sache.

@markrendle Wenn Bibliotheksautoren der ASP.NET Core-Logik folgen würden, würden sie dann nicht einfach zu netcoreapp statt zu netstandard springen? Schließlich können auch sie von den neuen APIs profitieren? Warum sich überhaupt mit netstandard beschäftigen? ASP.NET ist schließlich nur eine weitere Bibliothek (wenn auch eine größere)

Mein Fall ist genau der gleiche wie von vielen anderen in diesem Thread erwähnt: Mein Unternehmen hat eine große SaaS-Anwendung, die auf eine große Anzahl interner und Drittanbieter-Bibliotheken angewiesen ist, die wahrscheinlich nie für .NET Core verfügbar gemacht werden. Der Plan für die Zukunft bestand immer darin, auf dem vollständigen .NET-Framework zu ASP.NET Core zu wechseln und dann langsam, über mehr als 5 Jahre, Ersatz für diese Komponenten von Drittanbietern zu finden. Diese (Nicht-)Ankündigung hat diese Pläne völlig über den Haufen geworfen.

Ich hatte den Eindruck, dass ASP.NET Core nicht auf dem .NET Desktop-Framework ausgeführt wird. Bearbeiten . Die Dokumentationsseite gibt an, dass ASP.NET Core auf dem vollständigen .NET Framework ausgeführt wird, was eindeutig Unterstützung impliziert.

Es scheint eine andere Option zu geben, falls dies noch niemand vorgeschlagen hat.

Schließlich ist ASP.NET Core Open Source. Dies bedeutet, dass es möglicherweise zwei verschiedene Versionen von ASP.NET Core gibt:

ASP.NET Core: zielt auf .NET Core (netcoreapp2.0), den vorhandenen Build, ab
„ASP.NET Core Standard“ : ein weiterer Build, der auf .NET Standard (netstandard1.* und net4*) abzielt und je nach Bedarf auf .NET Desktop Framework und anderen Standardplattformen ausgeführt wird.

Der Core-Build wäre mit .NET Core verknüpft, während der Core Standard -Build durch die Verfügbarkeit von netstandard1.* und net4* und später von .NET Standard 2.0+ eingeschränkt wird; langsamer, aber kompatibler. .NET Core kann besser für Greenfield und Start-ups sein, und Standard kann großartig für Brownfield, Migrationen und Unternehmen sein.

Der vom Microsoft-Team eingeschlagene Weg ist als Hauptlinienoption sinnvoll, Core ist die Zukunft des Frameworks. Unterdessen sollte es möglich sein, ein zusätzliches Ziel für netstandard beizubehalten, und zwar mit minimalem Aufwand. Es kann ein Open-Source-Projekt sein. Vielleicht kann das im Sinne der Kompatibilität tatsächlich auch von Microsoft durchgeführt werden.

Dies bedeutet, dass der "ASP.NET Core Standard" möglicherweise nicht alle neuen Funktionen erhält, aber da dieser Zweig der Kompatibilität dient, haben die Benutzer, die ihn verwenden, die Gewissheit, dass sie alle unterstützten Funktionen im Standardframework verwenden können und dass die Der Standard-Zweig wird auf Github auf unbestimmte Zeit verfügbar sein, und Freiwillige können Fixes und Updates vom Core-Zweig zum Standard-Zweig portieren.

Wenn es möglich war, die .NET Desktop Framework-Kompatibilität in ASP.NET Core so lange aufrechtzuerhalten, dann sollte die Wartung eines anderen Builds keine so große Hürde sein. Viele andere .NET-Projekte machen dasselbe mit mehreren Zielen, wie protobuf-net, mit einigen bedingten Kompilierungsanweisungen.

Grundsätzlich können Benutzer, die Active Directory und System.Drawing benötigen, ASP.NET Core Standard verwenden, sie sind jedoch auf die Verwendung von Windows beschränkt. Ihr Code kann jedoch problemlos auf .NET Core portiert werden, sobald Bibliotheken verfügbar sind, und zwar in ihrem eigenen Tempo, ohne das Risiko eines zukünftigen Mangels an Unterstützung.

Ich denke, die Frage wäre, ob das Team in der Lage wäre, einen solchen Zweig bereitzustellen. Für grundlegende Bibliotheken wie ASP.NET kann dies erforderlich sein. Ich denke, die Notwendigkeit, einen Pfad von .NET Framework zu .NET Core bereitzustellen, wird diese Art von Notlösungen irgendwann sowieso erfordern. Software ist flexibel und diese Art von Lösung ermöglicht einen reibungslosen Übergang.

Ich denke, der zusätzliche Aufwand dafür sollte als kleine Investition angesehen werden, verglichen mit der wesentlich größeren Akzeptanz und besseren Migration, die es der Community als Ganzes bieten wird. Tausende von Benutzern mehr zu haben, wird sicherlich dazu beitragen, mehr Beiträge zum Projekt zu generieren, um die Arbeit der Wartung von zwei Zielen auszugleichen.

@benchjung

Wenn Bibliotheksautoren der ASP.NET Core-Logik folgen würden, würden sie dann nicht einfach zu netcoreapp statt zu netstandard springen? Schließlich können auch sie von den neuen APIs profitieren? Warum sich überhaupt mit netstandard beschäftigen? ASP.NET ist schließlich nur eine weitere Bibliothek (wenn auch eine größere)

Nun, wenn ein Bibliotheksautor etwas schreiben würde, das enorm von den neuen Primitiven und der Unterstützung auf Framework-Ebene für _BOBTRUES_ profitiert, dann würde das wahrscheinlich Sinn machen (und ich sehe durchaus gute Argumente für JSON oder andere Serializer-Bibliotheken, die diese unterstützen , übrigens). Aber wenn sich der Code im Paket nicht wirklich um _BOBTRUES_ oder so etwas kümmert, dann müssten Sie besonders blutrünstig sein, um netcoreapp20 zu schreiben, wenn netstandard20 _genauso gut funktionieren würde_ .

@markrendle Sie würden sich also freuen, wenn beispielsweise Newtonsoft.JSON dies für die nächste Version tun und die Unterstützung für vorhandene Versionen mit einem Zeitraum von einem Jahr einstellen würde? Sie freuen sich, dass Parsing-, IO- und Hochleistungsbibliotheken damit beginnen, die Unterstützung für Netstandard und .NET Framework einzustellen?

Vorschlag, wie man das beheben kann:

  1. Lassen Sie asp.net Core 2.x auf .net laufen und verschieben Sie die reinen Core-Sachen auf Version 3.x (backportieren Sie die benutzerorientierten Funktionen von 2.0 auf 1.x und nennen Sie es 2.0)
  2. Stellen Sie von Anfang an klar, dass asp.net Core 2.x die letzte Version sein wird, die auf .net funktioniert, aber geben Sie ihm eine lange Lebensdauer.
  3. Konzentrieren Sie sich darauf, die Tools zum Überprüfen, ob eine Bibliothek auf netstandard2.x funktioniert, besser zu machen. Das aktuelle Ratespiel ist es, was die Leute ausflippt.
  4. Konzentrieren Sie sich darauf, den von vielen verwendeten Bibliotheken zu helfen, netstandard2.x/core-Unterstützung zu erhalten. (Auch wenn es nur Windows ist)
  5. Passen Sie die Kommunikation zwischen Microsoft und der Community an. Ja, wir wollen Geschwindigkeit/Features/usw., aber viele brauchen auch Zuverlässigkeit/Legacy. Wir müssen einen besseren Mittelweg als diesen finden.

@vectorix : es war. Auf der allerersten Seite der ASP.NET Core-Dokumentation, Einführung in ASP.NET Core , heißt es:

Nächste Schritte

...
Eine ASP.NET Core-App kann die .NET Core- oder .NET Framework-Laufzeit verwenden. Weitere Informationen finden Sie unter Auswählen zwischen .NET Core und .NET Framework .
...

Es verlinkt auf eine Seite, die ganz klar sagt, dass Sie .NET Framework (das vollständige) verwenden können.

Um Himmels Willen, diese Vergleichsseite sagt sogar Folgendes:

.NET Framework wird weiterhin die natürliche Wahl für viele bestehende Szenarien sein und wird daher nicht für alle Serveranwendungen durch .NET Core ersetzt.

Alles, was mich persönlich glücklich machen würde, wäre zu sagen, dass BOBTRUES in netstandard x sein wird, wo x nicht einmal definiert werden muss. Andernfalls sagen Sie, dass Netstandard schon tot ist, wenn Sie sich um Leistung kümmern ...

5 Tage später beginnen wir mit dem BUILD-Event.

Warten wir ab und lassen Microsoft (hoffentlich) eine Ankündigung machen und ihre Vision und Roadmaps mit allen teilen

@CMircea : Danke für den Hinweis. Das ist in der Tat offensichtlich. Es scheint, dass die Aufrechterhaltung der Kompatibilität mit .NET Desktop Framework erforderlich wäre, um dem Wortlaut und Geist der Seite zu folgen.

Wir haben gerade einen großen Auftrag für einen Client abgeschlossen, bei dem ASP.NET Core 1.1 auf .NET462 installiert ist, das auf Azure gehostet wird. Wir mussten diesen Weg gehen, da sie Daten auf der Website aktualisieren, indem sie eine MS Access-Datenbank hochladen und die Daten in Azure SQL importieren. Die einzige Möglichkeit, dies zu tun (und es war ein Kampf), bestand darin, das gesamte Framework zu verwenden. Ich möchte nicht wirklich in der Lage sein, unserem Kunden sagen zu müssen, dass diese Lösung nur 1, 2, vielleicht 3 Jahre lang unterstützt wird, wenn wir Glück haben. Ihnen zu sagen, dass sie ihren gesamten Prozess ändern müssen, um das Zugriffsproblem zu beseitigen, ist keine Option, ich habe es jahrelang versucht!

Wenn es eine bessere Option zum Lesen einer Access-DB gibt oder sie irgendwo in einer Roadmap steht, dann freue ich mich. Ansonsten ist dies besorgniserregend.

@bencyoung Ich denke, der große Unterschied ist, dass JSON.NET keine Anwendung ist, sondern eine Bibliothek. Ich glaube, die Absicht für Bibliotheksautoren ist es, .NET Standard als Ziel zu haben, um eine möglichst breite Kompatibilität sicherzustellen, während ASP.NET Core ein Anwendungsmodell ist. Die Frage, die ich hätte, ist, wie viele der Ebenen von ASP.NET Core mit .NET Standard kompatibel sein werden, und was zielt auf Netcore ab? Ich habe neuen Code, den ich gegen .NET Standard geschrieben habe, aber Verweise auf Aspekte der ASP.NET Core-Schichtung, aber als Bibliothek verfügbar gemacht.

Nichtsdestotrotz hindert nichts Bibliotheksautoren daran, auf Netcore statt auf Netstandard abzuzielen, aber sie riskieren, die Kompatibilität in einer Vielzahl potenzieller Projekte zu verringern, während ASP.NET Core den Schaden für Anwendungen begrenzt, die auf einer (jetzt) ​​bestimmten Laufzeit ausgeführt werden.

@Antaris ASP.NET ist meines Wissens eine Bibliothek. Turmfalke ist die Anwendung. Sie können ASP.NET Core in jeder Anwendung, die Sie derzeit möchten, selbst hosten?

@bencyoung Fairer Punkt, schlechte Formulierung meinerseits.

Was ich damit sagen will (wenn ich es _richtig_ sagen kann), ist, dass Sie ASP.NET Core (als Stack) auf eine bestimmte Weise verwenden – um eine Webanwendung auszuführen. Abhängig von Ihrem Anwendungsmodell können Sie eine Bibliothek wie JSON.NET auf vielfältige Weise verwenden. Wenn Sie an die beweglichen Teile von ASP.NET Core denken, werden Dinge wie Razor immer noch gegen .NET Standard entwickelt, und diese Dinge könnten im Allgemeinen in anderen Anwendungsmodellen verwendet werden. Ist das sinnvoll?

Verstehen Sie mich nicht falsch, ich verteidige nicht einen Ansatz gegen den anderen, aber ich profitiere von der Arbeit an ein paar Greenfield-Projekten, anstatt mit älteren Codebasen zu integrieren/aktualisieren, abhängig von der zukünftigen Kompatibilität mit netfx. Ich denke, in diesem Sinne kann ich dem Argument für erhöhte Kompatibilität (ASP.NET Core 2+ auf netfx) nicht viel Gewicht hinzufügen.

@Antaris Danke, obwohl ich mir da nicht sicher bin! Wir hosten REST-APIs selbst im selben Prozess wie WCF-Dienste für Abwärtskompatibilität innerhalb von Windows-Diensten....

Wow, was für eine schreckliche Entscheidung von Microsoft. Zuerst sollte .NET Core das neue .NET werden, dann entscheidet Microsoft, dass wir so viele der alten APIs wie möglich zurückbringen müssen. Jetzt lassen sie die Leute hinter sich, die Microsoft vertraut haben, indem sie ASP.NET Core-Projekte mit dem vollständigen Framework gestartet haben. Ich verliere jeden Tag mehr und mehr den Glauben an .NET. Golang ist nicht perfekt, aber es sieht von Tag zu Tag attraktiver aus ... und falls es noch niemand bemerkt hat ... es gewinnt immer mehr an Zugkraft. Ich dachte, Microsoft könnte aus der Unfähigkeit der Java-Community Kapital schlagen, irgendetwas in kurzer Zeit zu erledigen, aber .NET Core war eine komplette Enttäuschung und wir sind in den letzten 2 Jahren mehr oder weniger auf der Stelle getreten … und alles, was wir haben Im Gegenzug ist es plattformübergreifend (wen interessiert es jetzt, dass Sie .NET in einem Container auf Windows Nano ausführen können) und eine Menge Komplexität (lächerlich schreckliche Tools, keine F#-Unterstützung (VS), .NET Standard-Bingo.)

Update: Ich sehe hier ein paar Daumen nach unten, aber es ist schwer, eine sinnvolle Unterhaltung mit Emojis zu führen;) Womit stimmst du nicht überein?

Die plattformübergreifende Unterstützung ist der Hauptgrund, warum ich zu ASP.NET Core gewechselt bin, und ich denke, dass ich damit nicht allein bin. Aber das ist nicht die einzige Verbesserung von ASP.NET Core. Es gibt noch mehr, wie den modularen Aufbau, der natürlich auf einem über Jahre gewachsenen Framework dringend benötigt wird. Buildin DI ist ebenfalls neu.

Die Möglichkeit, das alte 4.x-Framework zusammen mit ASP.NET-Kern zu verwenden, scheint mir ein guter Kompromiss zu sein: OS/Linux-Fans wie ich werden nicht gezwungen, Windows zu verwenden. Aber Unternehmen, die Windows wirklich benötigen (z. B. für die AD-Authentifizierung), können sie verwenden. Ich verstehe nicht, warum Microsoft diesen guten Mittelweg bricht. Besonders jetzt, wo viele wichtige Namespaces aus dem alten 4.x-Framework noch nicht auf ASP.NET Core portiert sind.

@DMWOO7 Bitte verwechseln Sie nicht .NET Core und ASP.NET Core.

Bitte verwechseln Sie .NET Core und ASP.NET Core nicht.

Die Ironie. 😆

@MartinJohns Ich habe meinen Beitrag aktualisiert, um ihn deutlicher zu machen.

@benchjung

Sie würden sich also freuen, wenn beispielsweise Newtonsoft.JSON dies für die nächste Version tun und die Unterstützung für alle vorhandenen Versionen mit einem Zeitraum von einem Jahr einstellen würde? Sie freuen sich, dass Parsing-, IO- und Hochleistungsbibliotheken damit beginnen, die Unterstützung für Netstandard und .NET Framework einzustellen?

Ich persönlich wäre damit einverstanden, weil ich Webanwendungen und -dienste baue, die auf Linux-Servern in Containern ausgeführt werden, und mich um niemanden außer um mich selbst und meinen eigenen Anwendungsfall schert, weshalb ich dabei bin dieser Faden.

Im Ernst, ich würde nicht erwarten, dass JSON.NET die Unterstützung für netstandard einstellt, aber ich wäre überhaupt nicht überrascht, wenn jemand eine Core.Json-Bibliothek veröffentlichen würde, die mit dem optimaler-für funktioniert -Webentwicklung netcore APIs.

Willkommen bei Python 3 von .NET. Ich hatte das Gefühl, dass dies jedes Mal passieren wird, seit Core vor Jahren angekündigt wurde.

Das ASP.NET Core-Ziel netcoreapp2.0 ist am sinnvollsten. .NET Core hat einen Neuanfang und eine Möglichkeit geschaffen, Anwendungen auf mehreren Plattformen auszuführen. Der Versuch, all diese für Windows erstellten APIs mitzuschleppen, ist nur ein Zugunglück, das darauf wartet, passiert zu werden. Die Python 3-Analogie ist gut und Python 3 auch.

OK, nachdem ich den Thread gelesen habe, biete ich eine etwas andere Ansicht an, offensichtlich eine marginale:

  • Ich mache keine Websites zum Leben (studiere immer noch), von Zeit zu Zeit drehe ich eine kleinere oder größere Website, entweder für mich selbst oder für kleine Unternehmen/Organisationen. Manchmal kommen Leute und fragen nach einem technologischen Rat.
  • Ich habe ASP.NET von Anfang an verwendet, aber ich habe den "Web Forms Stack" größtenteils ignoriert und HTML direkt verarbeitet und erstellt - denken Sie an Razor Pages.
  • Alles, was ich jemals mit dem Internet zu tun hatte, lief immer auf IIS. Cross-Plattform-Support ist für mich uninteressant, obwohl ich davon nicht beleidigt bin.
  • Ich bin zu klein, um mich darum zu kümmern, was offiziell unterstützt wird.
  • Ich bin im Allgemeinen nicht auf Bibliotheken von Drittanbietern angewiesen.

Ich würde erwarten, dass es jedem, der Microsoft folgt, aufgefallen sein muss, dass .NET Core möglicherweise mehr Ressourcen erhält als .NET Framework und dass .NET Framework schließlich in einem reinen Wartungsmodus landen könnte. Auch wenn fehlende APIs hinzugefügt werden, ist es ziemlich klar, dass nie die Absicht bestand, Feature-Parität mit dem vollständigen .NET Framework bereitzustellen.

Die Tatsache, dass ASP.NET Core auf .NET Framework ausgeführt wird, ermöglichte es mir, an der Spitze der Entwicklung zu bleiben, die Relevanz in der Branche aufrechtzuerhalten und all die coolen neuen Dinge zu haben, während ich immer noch Zugriff auf den vollständigen Funktionsumfang des Frameworks (und die Betriebssystem). Ich habe einige einfache Webseiten in ASP.NET Core ausprobiert und hatte vor, auch eine größere zu starten. Eigentlich hatte ich geplant, alle neuen Entwicklungen in ASP.NET Core auf .NET Framework durchzuführen. Nun, ich denke nicht mehr.

Lassen Sie mich einige der Fragen beantworten (in keiner bestimmten Reihenfolge):

  • Warum ASP.NET Core 2.x und nicht 1.x
    Razor Pages auf jeden Fall. So arbeite ich meistens. Stabilität und das, was andere als "Reife" bezeichnen, wäre eine andere, obwohl vorgeschlagen wurde, dass Fixes zurückportiert werden. Ich würde das Werkzeug als großen Einfluss betrachten, wenn es geteilt würde.
    Das bedeutet, dass es für mich ausreichen würde, es auf 3.x zu verschieben.

  • Warum ASP.NET Core und nicht ASP.NET
    Nun, angesichts dieses Themas ist das eine berechtigte Frage. Wenn Sie über das vollständige .NET Framework verfügen, fügt ASP.NET Core per Definition einen Mehrwert hinzu. Moderner Stack, Tag-Helfer, einheitliche API und MVC, neueste Funktionen. Ohne das vollständige .NET Framework nicht so sehr. In der Tat sieht es so aus, als wäre die Rückkehr zu ASP.NET die beste Lösung für mich.

  • Neue Funktionen oder Kompatibilität?
    100 % neue Funktionen. ABER, das Umschalten von Zeichenfolgen auf UTF-8 (und 4-Byte-Zeichen!) oder das Umgestalten der Architektur sind für mich kompatible Änderungen. Das Herausnehmen von Features ist es nicht.

  • Welche Funktionen von .NET Framework verwende ich
    Die Großen machen mir Sorgen:

  • _System.Windows.Media.Imaging_. Definitiv nicht ~~System.Drawing~. Das klingt nach allem, worum es bei .NET Core geht. Da dies ein langer Thread ist, zitieren Sie @JimBobSquarePants und @mstum :
    > Insbesondere System.Drawing ist sowohl verwirrend als auch besorgniserregend. Ich kann nicht nachvollziehen, warum Sie diese API jemals auf einer beliebigen Plattform auf .NET Core portieren möchten. Es ist schwierig damit zu arbeiten, wird auf dem Server nicht unterstützt und es fehlen viele kritische Funktionen, die für die moderne Entwicklung erforderlich sind (Multi-Threading, Pixelformate, ICC, EXIF, Quantisierung, indiziertes Png und so weiter).

Klassen im System.Drawing-Namespace werden nicht für die Verwendung in einem Windows- oder ASP.NET-Dienst unterstützt. Der Versuch, diese Klassen innerhalb eines dieser Anwendungstypen zu verwenden, kann zu unerwarteten Problemen führen, wie z. B. einer verringerten Dienstleistung und Laufzeitausnahmen. Eine unterstützte Alternative finden Sie unter Windows-Imaging-Komponenten.

Alle meine Web-Imaging-Sachen verwenden WIC. Die Portierung einer Technologie, die nie unterstützt wurde, während die seit Jahren empfohlene nicht portiert wird, wäre eine kleine Enttäuschung (wenn auch verständlich, wenn dies die Forderung der meisten Kunden ist).

  1. _System.Windows.Xps_ und _System.Windows.Markup_. Ich erstelle alle Dokumente (von der Rechnung bis zum Versandetikett) in XPS. Sie erhalten Design-Time-Unterstützung beim Erstellen der Dokumente in XAML und voll funktionsfähiges Databinding, XAML-Layout einschließlich Textstapel, Paginierung, Vorlagen und Styling mit Triggern usw. während der Generierung - ziemlich cool.
  2. _System.Reflection_ zum Prüfen von Baugruppen, Generieren von Dokumentationen etc. und Auffüllen von Gerüstlücken.
    Andere, die erwähnt wurden:
  3. _WCF_ und _ServiceModel_, darüber geht die Kommunikation mit der Regierung
  4. _DirectoryServices.Protocols_ und NTLM-Authentifizierung
  5. Räumliche Typen in SQL
  6. Kryptographie
    Andere, die ich verwende, aber meines Erachtens verfügbar sind: E-Mail, ZIP-Archivierung.

Am Ende ist dies eine rein geschäftliche Entscheidung. Für mich schränkt ASP.NET Core ohne vollständiges .NET Framework das ein, was ich erstellen kann, und ich habe im Moment keinen überzeugenden Grund, es zu verwenden. Gerne überprüfe ich neu, ob sich die Situation geändert hat oder mein Lebensunterhalt davon abhing.
Aber ich glaube nicht, dass es darauf ankommt, ob ich auf der Plattform bin oder nicht. Es spielt eine Rolle, ob bekannte Namen und große Unternehmenskunden dabei sind. Es spielt eine Rolle, ob die erstellten Anwendungen in Azure landen und meine nicht. Also denke ich, dass ich mitspielen muss, was auch immer das Framework am Leben erhält.

Ob diese Änderung es am Leben und wettbewerbsfähig hält, ist eine andere Frage. Um fair zu sein, glaube ich, dass es, wie jemand oben sagte, auf Leute abzielt, die keinen .NET Framework-Hintergrund haben. Für andere lohnt es sich entweder zu wechseln oder nicht. Und dann gibt es Leute wie mich, die dachten, sie könnten das Beste aus beiden Welten haben. Die Entscheidung war abrupt und vielleicht sogar unfair, aber das ist immer das Risiko, wenn man mit den neuesten Technologien in der Entwicklung arbeitet. Ist mit .csproj passiert, jetzt mit .NET Framework und ich bin mir ziemlich sicher, dass es auch in Zukunft passieren wird.

PS. Schade, dass auf diese "nie kommunizierte" lückenfüllende Rolle nicht schon vorher hingewiesen wurde. Ich habe das msbuild-Projektsystem unterstützt, aber wenn klar gewesen wäre, dass .NET Framework in ein paar Monaten nicht mehr geplant ist, hätte ich wahrscheinlich nicht so viel Interesse daran (oder hatte das Gefühl, ich sollte ein Mitspracherecht haben). Ich denke, es ist in Ordnung, große Entscheidungen zu treffen, und besser spät als nie, aber es würde helfen, wenn die Zielgruppe konsistent wäre.

Am Ende ist dies eine rein geschäftliche Entscheidung.

Das Problem ist, dass Microsoft Unsicherheit schafft. Big Business hasst Unsicherheit. Früher war Microsoft der König der Kompatibilität (gut oder schlecht, nicht meine Entscheidung). Dann kam .NET Core auf den Markt ... die Kompatibilität brach ... und dann gute Neuigkeiten, wir werden eine Reihe der alten APIs wieder hinzufügen. ..und jetzt haben wir diesen ASP.NET Core 2.0 Bruch.

Große Unternehmen mögen langweilige, zuverlässige Tech-Stacks. Startups kümmern sich weniger darum, und es scheint, als könnte Microsoft sich nicht entscheiden, welche Gruppe sie zufrieden stellen wollen.

@GiorgioG Ich bin mir nicht sicher, ob ich wirklich verstehe, warum große Unternehmen mit bestehenden Apps dann zu ASP.NET Core wechseln möchten. Es sieht eher aus wie ein Modeding oder so.

@miloush Ich denke, es geht mehr darum, sich auf die Zukunft vorzubereiten. Wenn Sie Ihre vorhandene Codebasis langsam auf .NET Standard/ASP.NET Core umstellen, sie aber unter dem vollständigen Framework ausführen, positionieren Sie Ihren Code so, dass er in Zukunft mit .NET Core kompatibel ist, sodass Sie keine riesig, auf einmal, alles umstellen, wenn die Unterstützung für das alte System wegfällt.

Jetzt können Unternehmen das nicht, weil die Umstellung auf .NET Standard nicht ausreicht, Sie müssen die Kühlhilfe entweder vollständig oder gar nicht trinken.

@miloush - Angenommen, sie haben ein Projekt mit ASP.NET Core 1.1 im gesamten Framework gestartet. Sie können niemals mit dem vollständigen Framework zu ASP.NET Core 2.0 wechseln. Ist das akzeptabel? Klingt ziemlich schrecklich für jeden in diesem Boot.

@miloush Weil .Net Core produktiver ist (ich möchte hier nicht alle technischen Fortschritte aufzählen, Sie kennen sie, zusammengeführte API/MVC-Controller, Tag-Helfer, Lokalisierungsunterstützung usw.) und weil Unternehmen Upgrades durchführen. Was sie normalerweise nicht tun, sind Big-Bang-Upgrades, weil sie sich keine Diskontinuität leisten können, sie müssen es normalerweise in kleinen Schritten tun.

Ganz anders für ein Startup, dem es egal ist, ob die Unterstützung für eine frühere Version eingestellt wird. Sie haben kein Erbe, sie haben keine Probleme dieser Art.

@popcatalin81 - All diese Punkte können auch mit dem vollen Framewrok erreicht werden, das eine steht nicht im Konflikt mit dem anderen, das Problem ist das Entwicklungstempo des einen und des anderen, ich sehe MS zu sehr in Eile, um ein Mikro zu veröffentlichen. Service-Framework, das in den Benchmark-Charts gut aussieht, sieht aus, als wäre es zu einer Besessenheit geworden.

Würde empfehlen anzuschauen:

„Drei Laufzeiten, ein Standard… .NET Standard: Alles in Visual Studio 2017“

Mit den beiden Scotts in 45 Minuten bei Build https://channel9.msdn.com/ Könnte etwas erwähnt werden?

@adrianlmm Relevant, aber nicht streng verwandt, haben wir schon aufgehört, den Mikrodienst Koolaid zu trinken? Es fügt eine Menge Komplexität hinzu (Build/Bereitstellung/Betrieb/Fehlerbehebung/usw.) und die meisten Unternehmen brauchen sie nicht (wie viele Unternehmen brauchen horizontale Skalierbarkeit, die die zusätzlichen betrieblichen Komplexitäten rechtfertigt?) Ich bin alles für begrenzte Kontexte, aber wir Dafür brauchen Sie keine 50 Microservices.

@GiorgioG meine Frage war eher, warum sie überhaupt zu ASP.NET Core 1.1 wechseln würden. Nun, das habe ich, und ich fühle mich - nicht mein bester Tag, das ist sicher. Aber ich habe keine große Codebasis, die ich migrieren müsste, und würde warten, bis sich die Dinge ein wenig beruhigt haben, bevor ich größere Investitionen tätige. Ich meine, auch ohne Budget habe ich die Entwicklung einer neuen, größeren Website auf ASP.NET Core verschoben, bevor sie brauchbare Tools erhält, und die Zukunft ist ein bisschen klar – es stellte sich als keine so schlechte Entscheidung heraus. (Haftungsausschluss: Auch hier musste ich diese Entscheidung nie mit Big Business-Codebasis treffen oder wenn ich davon lebe, also nackt mit mir.)

Ich beschuldige die Leute nicht, die aufspringen (ich tat das auch bei kleineren Dingen), und ich möchte definitiv nicht die andere Seite verteidigen – ich wäre begeistert, wenn ASP.NET Core .NET Framework für immer unterstützen würde!

Was ich nicht verstehe, ist, wie große Unternehmen, in denen Veränderungen und Ungewissheit ein Problem sind, 6 Monate nach RTM und neuen Toolchain-Anforderungen in die Situation geraten sind.

@miloush Wir warten seit über einem Jahr darauf, dass sich .NET Core einpendelt. Irgendwann müssen die Leute tatsächlich anfangen ... und Projekte abliefern ;)

@miloush Sie wollten die Verbesserungen von ASP.NET Core nutzen, müssen aber weiterhin .NET-Bibliotheken verwenden. Und offiziell hieß es, man könne zwischen .NET und .NET Core wählen. Jetzt sind sie plötzlich in einer sehr schlechten Situation: Sie können nicht auf ASP.NET Core Version 2.0 upgraden, sie bleiben bei Version 1.x hängen. Und irgendwann läuft der Support für 1.x aus - und neue Features werden auch für 1.x nicht rauskommen.

@GiorgioG , ich habe bisher .Net Core für ein neues Projekt verwendet und bin auf Full Framework auf Asp.Net Core migriert. Beides aktive Projekte.

Es ist nicht so, dass ich Net Core nicht überall verwenden möchte, aber tatsächlich KANN ich es noch NICHT überall verwenden! Das ist das Problem. Wir sollten das Wunschdenken beiseite lassen und zuerst an die reale Welt denken ...

@MartinJohns Ich habe das verstanden, ich bin in der gleichen Situation.

Ich befürchte jetzt, wenn es nicht das vollständige Framework unterstützt, würden wir mir viel Ärger für unsere anstehenden Projekte bereiten, und Pact-Net-Core ist eines davon.

Keine andere Wahl, als ASP.NET Core und MVC fallen zu lassen. Unterstützung für ASP.NET Core MVC eingestellt

Und so sind wir im Vietnam von .NET angekommen. Mutiger Schritt von Microsoft, mal sehen, ob es sich auszahlt.

Keine andere Wahl, als ASP.NET Core und MVC fallen zu lassen. Unterstützung für ASP.NET Core MVC eingestellt
@shanselman Ist es nicht zu früh, dies zu entscheiden? Gibt es eine öffentliche Ankündigung/Post, die das sagt?

Ich habe einige neue Projekte in ASP.NET Core 1.1 auf dem .NET Framework durchgeführt. Nicht begeistert, dass es jetzt eine Sackgasse ist. Ich wünschte, ich hätte sie im alten ASP.NET gemacht.

Die Scotts halten jetzt einen Vortrag mit Build, wahrscheinlich einige Neuigkeiten in oder kurz nach diesem Vortrag. Sie können es hier live streamen: https://channel9.msdn.com/?wt.mc_id=build_hp

Danke @NickCraver fürs Teilen

Typisch Microsoft.
Nach fast 3-4 Jahrzehnten konnten sie keinen anständigen Browser entwickeln.
fast 2 Jahrzehnte - kein Rahmen mit Lebensdauer > 1 Jahr mit Zukunftshoffnung.
Das ist es!.
Daumen nach unten, Tatsache wird sich nicht ändern.

Haftungsausschluss: Ich habe viel gelesen, aber nicht _alle_ der über 500 Kommentare oben.

Was mich ärgert, ist, dass MS immer so tut, als ob wir einfach aktualisieren sollten, und fragt: "Was hält Sie zurück?"

Verdammt, hör auf, wahnhaft zu sein! 😡 .NET Core ist nicht bereit, .NET fx zu ersetzen. Nicht heute, nicht in einem Jahr!

Folgendes hält mich zurück (mein ASP.NET Core 1.1-Projekt, das auf .NET fx ausgeführt wird):

  • Ich brauche Geld und Zeit, um die Migration für eine Null-Geschäftsverbesserung durchzuführen. Wirklich schwer vom Management zu bekommen.
  • Es sind viele Tests erforderlich ... keine Geschäftsverbesserung, aber echte Rückschrittsrisiken.
  • Wir müssen mit anderen Unternehmensdiensten integrieren, die COM -API verfügbar machen. Ich hasse es, aber ich habe keine Wahl. @shanselman schlägt vor, einen Out-of-Proc-Service auf .NET fx zu erstellen und „in einer Welt voller Schmerzen zu sein“. Tut mir leid, nein, das werde ich nicht tun.
  • EF ist einer der Hauptgründe, warum ich immer noch fx verwende. MS klärt euch auf und dann redet ihr mit uns über Migration. EF Core ist noch lange nicht bereit, EF 6 zu ersetzen.
  • Der Oracle- DB-Anbieter unterstützt Core nicht. Schlimmer noch: Sie kündigten Pläne an, nur ihren vollständig verwalteten Provider auf Core zu portieren, der viele Einschränkungen hat, z. B. keine Unterstützung für Oracle Advanced Queues.
  • Wir verwenden viele Bibliotheken von Drittanbietern , von denen einige migriert wurden, andere nicht (noch oder nie?).

@davidfowl
Ihre Kommentare geben mir das Gefühl, dass .NET fx langsam obsolet wird ... Planen Sie also, HTTP/2 in fx niemals zu unterstützen?
Es tut mir leid, aber Sie müssen einen Großteil Ihrer Arbeit auf .NET fx portieren, diese Plattform ist nicht tot. Was ist, wenn ich HTTP/2 von einer WPF-App aus ausführen möchte?
Es ist mir egal, ob Verbesserungen schneller an .NET Core geliefert werden oder ob einige unkritische Verbesserungen nur Core sind. Aber .NET Core wird .NET fx in absehbarer Zeit nicht ersetzen.

Was ist die MS-Anleitung zum Erstellen einer Web-App heute auf .NET fx (da ich es eindeutig nicht auf .NET Core tun kann)?

Es ist nicht so, dass ich mich nach neuen Funktionen sehne (das tue ich nicht), aber ich möchte auf einer lebendigen Plattform sein, nicht auf einer toten. Etwas, das gepflegt wird und notwendige Updates erhält – wenn auch langsam.

Beachten Sie auch Microsoft:

Wenn ASP.NET Core 2.0 auf .NET fx 5.0 ausgeführt wird, ist dies ein Upgrade, das ich rechtzeitig organisieren kann.
Es spielt keine Rolle, wann Sie .NET 5.0 ausliefern – auch wenn es viel später als ASP.NET Core 2.0 ist – und es spielt keine Rolle, wie lange ich für das Upgrade von .NET 4.6 brauche. _Ich habe einen Upgrade-Pfad und eine Zukunft._

Wenn ASP.NET Core 2.0 _nur_ auf .NET Core ausgeführt wird, stecke ich in einer Sackgasse fest.
So sehr ich es mir auch wünschen würde, ich sehe keine Migration von fx zu core in den nächsten _Jahren_. Warum, siehe oben.

@Kukkimonsuta hat oben eine der besten Zusammenfassungen. In meinem Fall war EF Core v EF6 zusammen mit anderen OSS-Toolsets, die nicht mit netstandard -Kompatibilität vorangekommen sind, der entscheidende Faktor für den Spatenstich bei Projekten mit Core-on-netfx.

Eine beunruhigende Sache in dieser Diskussion war, dass @davidfowl und seine Befragten aneinander vorbei redeten: Seine Antwort auf das Heulen und Schreien war ein unblutiges „Okay, aber welche APIs brauchen Sie wirklich?“ Dies ist ein lobenswerter Versuch, das Gespräch neu zu fokussieren, aber er verbirgt (höchstwahrscheinlich unwissentlich) ein Schlüsselproblem. Seine (und @shanselmans ) andere Antwort ist, dass dies erforderlich ist, damit ASP.NET Core „so schnell wie möglich vorankommt“. Wieder ein lobenswertes Tor, birgt aber wieder ein zentrales Problem. (Beide versteckten Probleme sind in der Regel die "versteckten Kernprobleme" mit OSS im Allgemeinen.)

Dies ist auch kein rein psychologisches/emotionales Problem, wie @MisterGoodcat in seinem Versuch, die Kluft zu überbrücken, behaupten würde. @GiorgioG traf mit seiner Behauptung, dass die „Unsicherheit“ etwas sei, das „Big Business“ nicht mag, näher ans Ziel.

Das eigentliche Problem sind die Kosten . Kosten, die durch Ungewissheit getrieben werden, und die Kosten, um einfach mit einer sich ständig ändernden Entwicklungslandschaft auf dem Laufenden zu bleiben. Diese treffen nicht nur das „Big Business“, sondern jeden einzelnen Entwickler . Vielleicht nicht in finanzieller Hinsicht (im Voraus), aber sicherlich in Bezug auf Zeit, Stress und damit die Fähigkeit, Lösungen für (ja) geschäftliche Probleme schnell und sicher umzusetzen.

Betrachten wir noch einmal die Challenge-Response von „ Welche fehlenden APIs brauchen Sie wirklich? “, indem wir diese Frage durch eine beträchtliche Projekt-Toolchain zurückverfolgen und wahrscheinlich zurück in Bibliotheken von Drittanbietern. Allein die Beantwortung dieser Frage ist kostspielig , bevor man überhaupt die Kosten für die Behebung berücksichtigt.

Wie wäre es mit „ so schnell wie möglich vorankommen “? Auch das ist großartig, aber mit jedem „Fortschritt“ entstehen den Entwicklern Kosten, da sie über Änderungen auf dem Laufenden bleiben müssen . Dies wirkt sich sowohl auf die Lern-/Nutzungsdifferenz aus, die mit dem Job einhergeht, als auch auf die Lernkurve und die Kosten für die Suche und Ausbildung neuer Talente.

Am beunruhigendsten ist die Haltung mancher, dass der "Randfall" von Abhängigkeiten von älteren, nicht portierbaren Bibliotheken kein Problem darstellt, das es wert ist, in Betracht gezogen zu werden. Zugegeben, es ist kein Ort, an dem jemand gefangen sein möchte, aber die Bewältigung technischer Schulden ist kein Kostenfaktor, der auf dem Zeitplan eines Nicht-Stakeholders getragen werden sollte .

Obwohl diese Kosten nicht trivial sind, kennen und erwarten wir sie alle in dieser Branche. In Bezug auf die Umstellung auf .NET Core haben die meisten meiner Meinung nach erwartet, dass es das Richtige wäre, diesen Weg zu gehen, selbst wenn wir nicht dazu gezwungen würden. Die Probleme:

  • Dies voranzutreiben bricht jetzt die "Amortisationspläne" (manchmal jahrelang) zusammen, mit denen die meisten von uns gearbeitet haben, sowohl in Bezug auf den aktiven Umzug als auch in Bezug auf die Bewältigung technischer Schulden (nicht portierbarer Code).
  • Die Art und Weise, wie es vorangetrieben wird („Wir tun dies zu unserem eigenen Besten“), verheißt nichts Gutes für zukünftige Stabilität: Woher wissen wir, welche zukünftigen Entscheidungen für uns getroffen werden?

Ich war damals auf der Keynote in Vegas, als @shanselman den Knopf zum Open-Source-ASP.NET drückte. Seitdem bewegt sich MS nur noch in Richtung OSS. Aber das war immer mit einer Frage verbunden: Wird sich neben dem Guten von OSS auch das „Böse“ in die Microsoft-Ethik einschleichen? Anders ausgedrückt, was verlieren wir im Tausch gegen das, was wir bekommen? Ich denke, hier fangen wir an, es zu sehen.


Eine weitere Nebenbemerkung: Ich schätze die Idee von @markrendle , dass dieser Schritt ein "Tritt in die Hose" für jeden Werkzeug-/Bibliotheksverwalter sein wird, um tatsächlich von netfx voranzukommen. Allerdings mit zwei Problemen: Erstens hätte ein Zeitplan gereicht. Wenn ein N-Jahres-Versionszyklus angekündigt worden wäre, in dem Version M.0 die Aufnahme von ASP.NET Core in .NET Core im Allgemeinen sehen würde, wäre das als „Stick“ genug gewesen. Ich wäre einer der Ersten, der es gegen die Betreuer von Tools, die ich (sozusagen) konsumiere, einsetzen würde. Zweitens werden Tools, die sich speziell auf ASP.NET (MVC oder Core) konzentrieren, mit dieser Ankündigung (und nachdem sie Luft geholt haben, um zu sehen, was die Reaktion auf die Negativität bringt) jetzt höchstwahrscheinlich darauf verzichten, sich Gedanken über netstandard zu machen compat und springen Sie einfach auch direkt zu .NET Core, was die .NET-Landschaft weiter aufspaltet.

FYI .NET Core 2.0 Preview ist da:
https://www.microsoft.com/net/core/preview

Beim Lesen der Versionshinweise von Asp.net Core Preview kann ich nichts darüber finden, dass Full .Net Framework nicht unterstützt wird.

Es ist bereits in den Bits fertig, nicht wahr?

Welp, eine meiner Befürchtungen bestätigt.

Fast direktes Zitat aus MS Build Talk: „70 % von allem in NuGet sind .NET Standard 2 API-kompatibel … und die einzigen, die es nicht sind, sind Dinge wie WinForms und WPF, weil diese nicht auf allen Plattformen vorhanden sind . Aber alles andere ist da. Kein Neukompilieren. Funktioniert einfach."

Das ist unglaublich irreführend.

@PabloAlarcon Dies ist die Änderung, nach der Sie suchen:

https://github.com/aspnet/Mvc/commit/1c5e4176069ea20671e1738ac599e544633f47ce

Da die Unterstützung für net46 als Plattformziel eingestellt wird, haben die meisten Projektdateien Folgendes:

-    <TargetFrameworks>net46;netstandard1.6</TargetFrameworks>
+    <TargetFramework>netcoreapp2.0</TargetFramework>

Ich denke, die meisten Leute wollten diese Änderung:

-    <TargetFrameworks>net46;netstandard1.6</TargetFrameworks>
+    <TargetFramework>netstandard2.0</TargetFramework>

Oh, danke, aber ich meinte die Versionshinweise der gerade veröffentlichten Vorschau 1: https://github.com/dotnet/core/blob/master/release-notes/2.0/2.0.0-preview1.md

@PabloAlarcon Ich denke, eines der größeren Probleme hier war der völlige Mangel an Kommunikation zu diesem Thema im Voraus, bis zu dem Punkt, dass sogar Sprecher bei Build gerade irreführende Informationen/Statistiken über das Ökosystem zitieren.

Sie alle behaupten, dass die meisten Bibliotheken netstandard2.0 -kompatibel sind, was bedeutet, dass sie (irgendwann) überall laufen sollten, aber diese Änderung bedeutet eigentlich, dass, wenn Ihr Projekt überhaupt in MVCs-Richtung atmet, Sie es NUR auf der .NET Core-Laufzeitumgebung ausführen können.

Dies sind die Versionshinweise für die .NET Core 2-Vorschau, nicht die Versionshinweise für die ASP.NET Core 2-Vorschau. Diese Änderung wäre hier: https://github.com/aspnet/home/releases/2.0.0-preview1

Und ich denke, es sollte dort unter bekannten Problemen und einer Liste der Breaking Changes sein ... aber wenn Sie auf den einzigen dort verfügbaren Link klicken, erhalten Sie eine Github-Liste ohne Ergebnisse

Mein Fehler, ich habe beide Seiten gelesen, aber die .net-Core-Seite kopiert.

Immer noch das gleiche, keine Erwähnung in Sicht.

@marcrocny du hast viel besser formuliert, warum ich dachte: "Welche Bibliotheken?" Frage lenkt vom eigentlichen Problem ab, als ich könnte, also danke. Ich brauche kein neues und glänzendes Pronto, ich brauche neue Features in einem angemessenen Zeitrahmen und sie müssen stabil sein und, was noch wichtiger ist, für eine Weile unterstützt werden.

10 Dollar sagen, dass HTTP2 nie das volle .Net erreichen wird.

Schätze, es ist Zeit für einen Community-Fork von ASP.Net Core.

Der Wechsel zurück zum vollständigen .NET Framework und NancyFX könnte für einige eine Option sein, abhängig von den Gründen für den Wechsel zum ASP.NET-Core überhaupt.

@dbus0 Das Problem ist, sobald Sie das heilige, gesegnete Land der Microsoft-Frameworks verlassen, enden Sie mit einem winzigen Ökosystem von Bibliotheken, die es unterstützen (im Vergleich zu ASP.NET).

Wenn Sie ASP.NET für das Web aufgeben, ist es meiner Meinung nach besser, einen Nicht-.NET-Tech-Stack zu wählen.

Kann jemand eine Liste von Funktionen nennen, die Aspnet Core 2.0 unmöglich macht?

Leute, ihr zerstört das einst so schöne .NET-Framework. Die linuxartige Art und Weise, wie Sie .NET verwalten, ist nur, dass alles wie ein riesiger großer Hack aussieht. Alles in MS-dev beginnt, amateurhaft und unzusammenhängend auszusehen, wobei jedes Team/Produkt alleine und für sich alleine läuft. Alles in BETA, alles InProgress, ein großer Riese, lasst uns versuchen und sehen, was passiert, haben wir gescherzt, wir haben versprochen, das noch nicht zu tun ..., brauchst du das wirklich? Warum ? und so weiter. Wenn wir solche Dinge wollten, hätten wir in PHP und Linux investiert, um Spaß daran zu haben, darüber zu diskutieren, wie Bibliothek X nicht mit Kernel Y funktioniert, weil Paket Z inkompatibel ist, also müssen wir unsere gesamte Anwendung nur zum Spaß neu schreiben.

Außerdem hasse ich es, wenn sich Teams hinter Marketing-Mantras wie „schneller vorankommen“, „Chancen erkunden“ und dergleichen verstecken, die Geschäftsziele nur hinter falschen technischen Gründen verbergen. Ich fing sogar an, hier und da im Ökosystem einige "Das ist Open Source - reparieren Sie es selbst"-Antworten zu sehen. Was ich verstehe, ist, dass wir vielen MS-Technologien nicht mehr vertrauen können, insbesondere .NET Core, das keine Ahnung hat, wohin es geht und warum. Mich hat aber schon der Wahnsinn der inkompatiblen Versionen und Breaking Changes auf JEDER Ebene und Entwicklungsstand in .NET Core (ASP.NET Core ändert alles bei RC? Ach bitte...) doch die Tatsache, sowohl als Entwickler als auch a Geschäftsanwender, ist, dass ich weder empfehlen noch im Namen meines Unternehmens entscheiden kann, in Core zu investieren, nur um endlose Diskussionen darüber zu beginnen, dass Core 1.0 dies nicht unterstützt, während Core 1.1 dies tut, aber wir können es nicht aktualisieren, weil es dies oder jenes kaputt macht, aber wir würden es tun gerne auf 2.0 upgraden, weil wir diese neuen Features brauchen, die nur 2.0 hat und... was? Machst du Witze ?

Und es spielt keine Rolle, ob diese Art von Ansatz etwas kaputt macht oder um zu verstehen, welche Namensräume oder Funktionen die Leute tatsächlich verwenden, um eine neue späte Änderung einzuführen, um Funktionen zu unterstützen, die die Leute vielleicht wollen. Sie schließen die Dinge durch das schlimmste Verhalten, das ich gesehen habe, kurz, das ist keine frühere Planung, weil wir einfach eine neue XYZ-Version herausgeben und den Leuten sagen können, dass sie ein Upgrade durchführen sollen. Wenn sie es aus irgendeinem Grund nicht können, Pech gehabt. Wir werden v1.0 "unterstützen", auch wenn wir an v8.0 arbeiten, außer dass Sie keine der v8.0-Funktionen haben werden, also wird unsere Unterstützung im Grunde darin bestehen, Ihnen auf den Rücken zu klopfen, wenn Sie sich beschweren und sagen, dass das Leben hart ist.

Ich kann nicht glauben, wie viele MS-Technologien wir in den letzten zwei Jahren fallen gelassen haben. Ich hätte nie gedacht, dass wir das schaffen könnten, da wir seit 1998 ein Microsoft-Shop sind. Verdammt, in unserer Gegend werden wir immer eingestellt, wenn es „ein .NET-Ding“ oder „es ist ein Windows-Ding“ ist (keine Fragen gestellt – es ist Windows -> rufen Sie sie an), aber wenn ich heute eine Technologie für ein neues Projekt auswählen muss, frage ich mich immer, ob es vernünftig ist, im Allgemeinen beim .NET-Framework zu bleiben. Und nachdem wir dies gelesen haben, werden alle unsere Investitionen in .NET Core sicherlich eingestellt, zumindest bis wir verstehen, was damit los ist. Wir haben weder Lust noch Zeit, unseren Kunden zu erklären, warum wir das oder das umschreiben müssen, weil .NET Core 1.1 nicht mit 2.0 kompatibel ist oder dass wir ein kleines separates Projekt erstellen müssen, das jemand pflegen muss, nur um eine Bibliothek zu hosten die wir benötigen, die aber mit einer "alten" Version des Frameworks kompatibel ist, wobei "OLD" eine Version bedeutet, die vor 3 Monaten veröffentlicht wurde. Und trotzdem müssten wir wegen der "älteren" Versionen, die gepflegt werden (MÖGLICHERWEISE), aber keine neuen Funktionen erhalten, ein Upgrade durchführen.

Sie müssen wissen, dass ein solcher Ansatz uns veranlasst, das .NET-Framework als GANZES zu überdenken, und das Überdenken des .NET-Frameworks bedeutet, Windows neu zu überdenken. Und Windows neu zu überdenken bedeutet, zu überdenken, ob wir Microsoft überhaupt brauchen. Es liegt nicht an uns, GitHub oder ein obskures Forum zu durchsuchen, um zu verstehen, welche Funktionen in vNext unterstützt werden, und sie mit vCurrent zu vergleichen, um zu verstehen, ob wir mit der Entwicklung beginnen können, die auf eine BETA- oder Alpha-Version abzielt, um mit vNext kompatibel zu sein, weil wir das brauchen spezifisches Feature, so dass die Entwicklung mit einer älteren Version zu diesem Zeitpunkt keinen Sinn macht, aber es ist unser Risiko, eine Veröffentlichung anzustreben, die nicht endgültig ist und die sich ändern könnte (und wird), nur um diesen Wahnsinn nach ein paar Monaten erneut zu beginnen. Das ist nicht „agil“, das sind Kinder mit viel Freizeit.

Ich wusste immer, dass ich Gates vermissen würde, aber ich hätte nie gedacht, dass ich auch Ballmer vermissen könnte. Gut gemacht Jungs.

Meiner Meinung nach ist es irgendwie noch zu früh, komplett auf .NET Core umzusteigen. Viele Frameworks und Bibliotheken von Drittanbietern unterstützen derzeit .NET Core derzeit nicht. Nehmen Sie NServiceBus als Beispiel. Bitte unterstützen Sie .NET Framework mindestens bis ASP .NET Core 3...

Offizielle (verwandte) Ankündigung
https://blogs.msdn.microsoft.com/webdev/2017/05/10/aspnet-2-preview-1/

Vorschau 1 Ausgaben

Diese Vorschauversion von ASP.NET Core 2.0 wird nur mit Unterstützung für das .NET Core 2.0 SDK geliefert. Unser Ziel ist es, ASP.NET Core 2.0 auf .NET Standard 2.0 auszuliefern, damit Anwendungen auf .NET Core, Mono und .NET Framework ausgeführt werden können.

Als das Team die letzten Probleme vor Build bearbeitete, stellte sich heraus, dass die Vorschau von ASP.NET Core 2.0 APIs nutzte, die außerhalb von .NET Standard 2.0 lagen, wodurch verhindert wurde, dass es auf .NET Framework ausgeführt werden konnte. Aus diesem Grund haben wir die Unterstützung von Preview 1 für .NET Core nur eingeschränkt, damit ein Entwickler beim Upgrade einer ASP.NET Core 1.x-Anwendung auf ASP.NET Core 2 Preview unter .NET Framework nicht beeinträchtigt wird.

Schönes Zurückrudern dort.

Das ganze Feedback und die „Rechtfertigung“ in diesem Thread für das Löschen von .NET Framework waren also nur für eine Vorschau?

Bemerkenswert, dass der Sinneswandel auch hier nicht angekündigt wurde...

@benaadams

Unser Ziel ist es, ASP.NET Core 2.0 auf .NET Standard 2.0 auszuliefern, damit Anwendungen auf .NET Core, Mono und .NET Framework ausgeführt werden können.

"Wir waren immer im Krieg mit Ostasien"

Das ist beruhigend, aber einige Kommentare oben von offiziellen ASP.NET Core-Mitgliedern lieferten eine _ganz_ andere Botschaft.

Ich hätte gerne eine offizielle Stellungnahme zur mittelfristigen Zukunft von ASP.NET Core in Bezug auf .NET Framework.

Ist MS verpflichtet, ASP.NET Core kompatibel mit netstandard zu halten?
Nicht nur die ASP.NET Core 2.0-Version (nicht unbedingt auf 4.7).

Sprechen Sie hier über eine Head-a-Splod-Situation. Was ist nur los? :Denken:

Schönes Zurückrudern dort.

Das ganze Feedback und die „Rechtfertigung“ in diesem Thread für das Löschen von .NET Framework waren also nur für eine Vorschau?

Hey, sei kein Arsch deswegen. Sie hatten eine Vorstellung davon, was ASP.NET Core sein sollte, es wurde viel Feedback gegeben, und das Feedback wurde angehört.

Danke ASP.NET-Team 👍

@davidfowl

Wann haben wir das letzte Mal String und Array in .NET Framework geändert?

In .Net Framework 4.6 für beide. Das ist eine Nebenversion hinter dem brandneuen .Net Framework 4.7 und vor weniger als zwei Jahren.

Ich bin mir nicht sicher, ob String und Array in .Net Framework so schwer zu ändern sind, wie Sie es klingen lassen.

@JamesNK

Es wurde viel Feedback gegeben, und das Feedback wurde angehört

War es? Zumindest einige der Rückmeldungen beklagten sich über unzureichende Kommunikation. Jetzt haben wir Leute von MS, die eine Sache in diesem Thread sagen, einen etwas neueren Blog-Beitrag, der eine andere Sache sagt, und keine Informationen über die Änderung oder die Zukunft.

Ich würde erwarten, dass zumindest jemand von MS in diesem Thread auftaucht und sagt, dass er seine Meinung für ASP.NET 2.0 geändert hat und dass das Löschen von .Net Framework für eine zukünftige Version immer noch auf dem Tisch liegt, aber er wird uns so schnell wie möglich informieren sie wissen mehr (oder was auch immer die tatsächliche Situation ist).

Ich würde erwarten, dass zumindest jemand von MS in diesem Thread auftaucht und sagt, dass er seine Meinung für ASP.NET 2.0 geändert hat und dass das Löschen von .Net Framework für eine zukünftige Version immer noch auf dem Tisch liegt, aber er wird uns so schnell wie möglich informieren sie wissen mehr (oder was auch immer die tatsächliche Situation ist).

Zu ihrer Verteidigung (und nicht, dass ich denke, dass dies überhaupt gut gehandhabt wurde), ist das gesamte Team ziemlich bei Build. Ich bin sicher, wir werden hier bald etwas hören. Niemandes Leben wird sich aufgrund dieser Entscheidung in ein paar Tagen ändern.

Hey, sei kein Arsch deswegen.

Ich habe heute und gestern mehrere Stunden mit meinem Team im Pseudo-Krisenmodus verbracht, um die Auswirkungen und die Änderung der technischen Strategie zu diskutieren, die dies in den nächsten 12 Monaten für uns haben würde, nur um zu sagen: „Oops, unser Fehler!“.

Ich begrüße die Änderung und bin dankbar, dass uns zugehört wurde. Obwohl ich nicht versuche, ein Arschloch zu sein, bin ich _sauer_ über die Kommunikation darüber.

Wir haben Zeichenfolgen als eines der wichtigsten Dinge identifiziert, die wir in .NET Core angehen möchten. Es gibt unzählige Ideen, aber eine davon ist, dass Zeichenfolge standardmäßig utf8 ist (jede Menge Kompatibilitätsprobleme, aber folgen Sie mir hier).
Eine andere Sache, die wir beheben möchten, ist die Möglichkeit, billige Segmente von Arrays/Strings, jedes Stück zusammenhängenden Speichers, zu nehmen. Wir haben Span hinzugefügtund sehen Buffer anum dies darzustellen. Es könnte bedeuten, dass String und Array neue Schnittstellen implementieren, die es ermöglichen, einen Slice zu nehmen, der eine 0-Zuweisung erfordert.
Dies führt zu neuen Methoden für String, die eine Aufteilung ermöglichen, bei der nicht jedes Mal ein Array zugewiesen wird.
Dies führt zu Überladungen von Int, UInt usw. (TryParse), die Span einnehmenund Span.
Dies führt zu neuen Codierungsroutinen, die Span nehmen.
Pufferund SpanDamit können Sie Speicher auf einheitliche Weise darstellen, und wir möchten den Netzwerkstapel aktualisieren, um das Übergeben von vorab fixierten Puffern zu ermöglichen, die Span benötigenoder Puffer.
Kestrel wird HTTP2 im 2.x-Zeitrahmen implementieren (derzeit auf 2.1 ausgerichtet) und das erfordert neue APIs im SSL-Stream, um ALPN auszuführen (https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation).
Http-Client auf .NET Core unterstützt Duplex-Streaming, wodurch es möglich wird, Streaming-Endpunkte über http in Signalr über eine einzige HTTP-Anforderung ohne Websocket zu implementieren.
Wir haben die Header-Parser-Implementierungen von HttpClient und System.Net.Http gegabelt und umbenannt (https://github.com/aspnet/HttpAbstractions/tree/d1d9bceff56cb44a194ae36923ce687e5e353006/src/Microsoft.Net.Http.Headers), damit wir sie verbessern konnten und lassen Sie sie sowohl .NET Framework als auch .NET Core unterstützen. .NET Core hat eine Kopie dieser Verbesserungen, die es nicht zurück geschafft hat, weil sie nicht verbessert werden mussten (wir konnten sie nicht nutzen).
Es gibt eine Reihe neuer Threading-Primitive, die eine neue API erfordern, die neue Szenarien erhellen wird, wenn wir sie nutzen können (https://github.com/dotnet/corefx/issues?q=is%3Aopen+is%3Aissue+ author%3Adavidfowl+label%3Aarea-System.Threading), das sind nur einige der Dinge, die ich persönlich eingereicht habe.

RIP moderne Plattform. Wenn das Kernteam von asp.net eine Lösung von oben erhalten hat.

Ich habe heute und gestern mehrere Stunden mit meinem Team im Pseudo-Krisenmodus verbracht, um die Auswirkungen und die Änderung der technischen Strategie zu diskutieren, die dies in den nächsten 12 Monaten für uns haben würde, nur um zu sagen: „Oops, unser Fehler!“.

Ich begrüße die Änderung und bin dankbar, dass uns zugehört wurde. Obwohl ich nicht versuche, ein Arschloch zu sein, bin ich sauer auf die Kommunikation darüber.

Du bist verärgert, dass sie auf die Community gehört und (scheinbar) den Kurs geändert haben? Dass Sie Zeit mit etwas verbringen, das nie fertiggestellt wurde, ist weder die Community noch Microsofts Schuld.

Großartige Neuigkeiten!

Ich hoffe, das bedeutet nicht, dass wir jetzt standardmäßig utf8-Strings und die anderen Goodies verpassen, über die @davidfowl gesprochen hat (wenn sie auf .NET Core ausgeführt werden).

Da der Plan „keine .NET Desktop-Unterstützung für ASP.NET Core 2.0“ endgültig gestrichen wurde, denke ich, dass wir diesen Thread jetzt schließen können (aber zögern Sie nicht, mich anzupingen, wenn Sie möchten, dass ich ihn wieder eröffne).

Ich möchte allen danken, die sich die Zeit genommen haben, an diesem Thread teilzunehmen; Zweifellos hat es dazu beigetragen, den Microsoft-Chefs klar zu machen, dass sie eine so große bahnbrechende Änderung nicht in letzter Minute stillschweigend übernehmen konnten, ohne ihre Community zu konsultieren oder die tatsächlichen Auswirkungen ihrer einseitigen Entscheidungen auf das gesamte Ökosystem zu messen.

Auch wenn wir alle unterschiedliche Meinungen hatten, war das Wichtigste, eine echte Diskussion über diese Änderung zu führen. Es ist eindeutig ein riesiger – und beispielloser – Erfolg (150 Teilnehmer und mehr als 600 Nachrichten, woot!)

Es ist erstaunlich, eine so großartige Community in Aktion zu sehen, ich bin so stolz darauf, ein Teil davon zu sein :call_me_hand:

@davidfowl @DamianEdwards @shanselman Danke. Das macht mein Leben viel einfacher, und wir können unsere Migrationspläne jetzt ohne Unsicherheit durchsetzen, wie so viele andere auch. Ich weiß, dass dies nicht ideal für das ASP.NET-Team ist, aber ich denke aufrichtig, dass es zum jetzigen Zeitpunkt der beste Schritt für das Wachstum der Plattform ist.

Und dieser Thread wurde bemerkenswert gut behandelt, sogar mit einigen weniger als produktiven Kommentaren. Sehr, sehr selten sehen Sie ein Problem mit Hunderten von Kommentaren, die nach einer Weile etwas Nützliches enthalten ( @davidfowl , Sie sind großartig).

Ich freue mich auf diese Diskussion mit 3.0, wenn ich hoffe, dass die Plattform den Punkt erreicht hat, an dem die Einstellung des Supports eine viel einfachere Option ist, um drastisch weniger Benutzer zurückzulassen. Ich freue mich darauf, dabei zu helfen, es dorthin zu bringen.

Dieses Ergebnis scheint in Ordnung zu sein. Ich bin mir sicher, dass wir bald eine Roadmap zusammenstellen können, mit einem Plan, alles zum Kern zu bringen - nur über einen Zeitraum, in dem jeder im Voraus davon weiß :)

Ich wollte auch meine Gedanken hinterlassen ... Es ist großartig zu sehen, dass das ASP.NET-Team nach dem Anhören des Community-Feedbacks schnell den Kurs korrigieren konnte, was meiner Meinung nach die beste Strategie für eine erfolgreiche .NET-Zukunft sowohl für das .NET-Framework als auch für das .NET-Framework ist Übernahme von .NET Core selbst, wobei ich erwarte, dass die meisten Übernahmen von bestehenden .NET-Entwicklern kommen werden, von denen viele in der Lage sein werden, ihre vorhandenen Codebasen weiterhin auf das neue Entwicklungsmodell von ASP.NET zu migrieren.

Ich kann auch nicht bemängeln, dass Fehler gemacht wurden, besonders bei der Entwicklung im Freien, wichtig ist, was wir daraus lernen können. Einer der größten Vorteile von OSS ist die Möglichkeit, frühzeitig Feedback zu erhalten, sodass Sie fundierte Entscheidungen über den besten Weg für die Zukunft Ihres Projekts und seiner Benutzer treffen können, was meiner Meinung nach dem ASP.NET-Team hier gelungen ist. Ich hoffe, dass es auch wiederholt, wie wichtig Botschaften sowohl für die Richtung, Vision als auch für den Fahrplan Ihres Projekts sind, wie sie die Grundlage für strategische Entscheidungen von Early Adopters und Ihren treuesten Stakeholdern bilden und wie wichtig es ist, Ihre Community einzubeziehen, wenn Sie grundlegende Vorschläge machen Änderungen, die sich auf ihre bestehenden und zukünftigen Investitionen in Ihre Plattform auswirken können.

Zuletzt war dies in den 9 Jahren, in denen ich aktiv auf Github entwickelt habe, der aktivste Thread, an dem ich je teilgenommen habe, mit den meisten Kommentaren, die in der Lage waren, nachdenklich und höflich zu bleiben, was ein gutes Zeichen für die Zukunft von .NET ist und zeigt, wie viele Entwickler sich immer noch für .NET interessieren. NET und sind bestrebt, ASP .NET Core einzuführen und MS in eine aufregende neue, facettenreiche Zukunft zu folgen, die .NET Standard und .NET Core ermöglichen werden. Spannende Zeiten stehen bevor!

Danke, dass Sie zugehört haben, Microsoft!

@davidfowl @DamianEdwards @shanselman Danke.
Danke Microsoft

Heilige Kuh! Welche heiße Sauerei habe ich verpasst? Was auch immer das Ergebnis am Ende sein wird, ich hoffe nur, dass es das Dotnet-Ökosystem stärkt und nicht schwächt. Ich bin damit einverstanden, zu versuchen, innovativ zu sein und irgendwann die Vergangenheit abzuschneiden, aber diese Referenzen, um das nächste Python 2 vs. 3 zu werden, sind allzu real. Auch wenn ich persönlich nicht von meinen eigenen Projekten betroffen bin, freue ich mich über die Unterstützung aller Entwickler hier. All diese Menschen, die sich sehr für das Produkt interessieren, mit detaillierten Beispielen, wie es sie beeinflusst, bestätigen, wie stark diese Community ist. Vielen Dank an alle, die sich um diese Community kümmern und sie am Leben erhalten!

Gut gemacht an alle!
Großartige Neuigkeiten für OSS auf .NET!!

@davidfowl @DamianEdwards @shanselman Vielen Dank für das Zuhören des Feedbacks. Vielen Dank auch persönlich für den Beginn der Diskussion innerhalb unserer Organisation darüber, wie wir daran arbeiten können, .NET Standard für eine verbesserte Plattformportabilität einzusetzen. Ich hoffe, dass wir einen Weg finden können, alle unsere Bibliotheken, die zwischen unserer WinForms-Anwendung und der ASP.NET Core-Anwendung geteilt werden, auf .NET Standard 2.0 auszurichten, sodass wir unsere ASP.NET Core-Produkte tatsächlich auf .NET Core ausführen können in der Zukunft.

Wir sehen uns wieder bei Version 3.0?

Positiv: Ich freue mich, dass Sie sich entschieden haben, dies zu ändern. Macht mein Leben als Entwickler viel einfacher und meine Rechtfertigung, Zeit und Energie in das Lernen und Entwickeln in .Net zu investieren, ist eine gute Begründung.

So danke.

Nun, ich denke nicht, dass es ein Fehler ist, die Unterstützung für volles netFx einzustellen. Im Gegenteil, der einzige Fehler ist, dass der ASP.NET Core ganz am Anfang das volle netFx unterstützt hat.

Mit anderen Worten, ASP.Net Core sollte NIEMALS in der Lage sein, das vollständige netFx zu unterstützen. Es sollte ein Web-Framework sein, das speziell für .Net Core entwickelt wurde.

ASP.Net Core soll auf .Net Core aufsetzen, das eine bestimmte Version von .Net Standard implementiert, und es sollte nichts mit dem vollständigen netFx zu tun haben.

ASP.Net Core-Apps können auf beliebigen Plattformen/Betriebssystemen ausgeführt werden, solange .Net Core darauf ausgeführt werden kann. Aber es geht nur um die Lauffähigkeit, nicht darum, alle plattformspezifischen Funktionen zu unterstützen. Wenn jemand wirklich Windows-spezifische Funktionen benötigt, sollte er Nuget-Pakete mit mehreren Zielen verwenden, die Windows unterstützen, oder er sollte stattdessen ASP.Net verwenden.

Also denke ich, dass das, was das Team zu tun versucht, den Fehler korrigiert hätte. Aber leider stoppt ihr sie erfolgreich.

Übrigens, vielleicht würde das Ändern von "ASP.Net Core" in "ASP for .Net Core" und das Ändern von "ASP.Net" in "ASP for .Net Framework" für alles Sinn machen. Und was Sie brauchen, ist eigentlich eine Art "ASP.Net Standard" oder "ASP für .Net Standard".

@davidfowl @DamianEdwards @shanselman Schließe mich auch meiner Stimme an, um dir für die Entscheidung zu danken.

.NET Framework ist sehr wichtig für uns und wir werden nie darüber hinausgehen, es sei denn, die Bibliotheken, auf die wir angewiesen sind, sind ebenfalls vorhanden.

Vielen Dank für die Aufnahme in die Community.

Willkommen bei echtem Open Source

Großartige Neuigkeiten! :) Ich hoffe, Microsoft weiß jetzt, dass das Vertrauen in eine verlässliche, verlässliche Zukunft für viele von uns von entscheidender Bedeutung ist, und sie werden diesen Fehler nicht bald wieder machen.

Ich bin mir ehrlich gesagt nicht sicher, warum ihr alle schon feiert. Der Blogpost widerspricht den Aussagen von Fowler und Edward in dieser Ausgabe, und sie haben ihre Aussagen noch nicht zurückgezogen oder korrigiert. Der Blogbeitrag wurde von Jeffrey geschrieben, einer weiteren Person. In dieser Ausgabe wurde erwähnt, dass die Einstellung der .NET-Unterstützung eine bewusst getroffene Entscheidung war. In dem Blogbeitrag erwähnen sie, dass der Mangel an Unterstützung „aufgedeckt“ wurde. In dem Blogbeitrag wurde nicht erwähnt, dass sie ihre Pläne nach dem Backslash der Community geändert haben.

Da fehlt es mir also noch an Klarheit. Widersprüchliche Aussagen von verschiedenen Teammitgliedern.

@DamianEdwards @davidfowl : Könnten Sie bitte Klarheit in Bezug auf dieses Problem schaffen?

@PinpointTownes : Vielleicht sollten Sie dieses Problem erneut öffnen, da es nicht so klar ist, wie Sie denken.

Ich bin bei @MartinJohns. Bedeutet dies, dass ASP.NET Core nicht von der rasanten Entwicklung von .NET Core profitiert, über die @davidfowl gesprochen hat?

Ich bin auch auf der skeptischen Seite. Das Fahrzeug ist zurückgewichen, um im Moment in die richtige Richtung zu fahren, aber die Beweise dafür, dass die Fahrer die Dinge nicht richtig im Griff haben, sind stärker denn je.

Die Widersprüchlichkeit zwischen dem, was hier vor sich geht, dem, was in den Pressemitteilungen/Blogs vor sich geht, und dem, was wir alle folgern müssen, ist intern vor sich. Hier draußen im Kundenland versuchen wir, eine Entscheidung darüber zu treffen, MS unser Geschäft für die nächsten X Jahre anzuvertrauen, und dies ist ein schockierender Weg, Vertrauen zu gewinnen.

Schau dir die Geschichte an:

  • Schlechte Entscheidung im Geheimen getroffen (schlecht)
  • Etwas unausstehlicher Rechtfertigungsversuch (etwas gut, etwas schlecht)
  • Umkehrung einer schlechten Entscheidung (gut)
  • Versuch, die ersten drei Schritte zu beschönigen (entsetzlich)

Schade, dass Build so ein hochglänzendes Wichsfest ist, denn das Vernünftigste, was man gestern in der Show der beiden Scotts hätte tun können, wäre gewesen, die Powerpoint wegzuwerfen und das halbe Dutzend hochrangiger .NET-Leute auf Plastikstühle in die Mitte zu stellen von der Bühne und nehmen die Scheiße mannhaft, während sie ihre Position vernünftig erklären.

Stattdessen ignorierten sie den Elefanten, der im Raum herumtobte, völlig und versuchten nun anscheinend, so zu tun, als wäre überhaupt nichts passiert.

Die Fehlentscheidungen und Rückschläge sind ein natürlicher Teil des Entwicklungsprozesses und bei OSS bekommt man sie zu sehen – das ist in Ordnung. Die Unternehmensvertuschung ist es nicht.

.NET ist ein Tool für MS, um Azure zu verkaufen, was ein Angebot ist, das noch mehr langfristiges Vertrauen erfordert als nur die Auswahl eines Entwicklungsframeworks. Wie läuft die Vertrauensbildung diese Woche?

Ich unterstütze @MartinJohns hier: Sie konnten netstandard2.0 nicht anvisieren, da sonst der Himmel einstürzen würde, und jetzt können sie es. (Natürlich können sie, es gibt keinen technischen Grund dafür, aber laut @davidfowl und @DamianEdwards war es nötig). Wie wollen sie das jetzt machen, was ist jetzt entschieden? Ich weiß, es ist //build und so, aber sie sind nicht so unterbesetzt, dass niemand zu diesem Thread kommen und die Dinge ein bisschen erklären kann. Oder müssen wir alle unserem Lieblings-Microsoft-Mitarbeiter eine Nachricht senden und über Backchannels fragen? Ich hoffe wirklich nicht.

Das Vernünftigste, was man gestern in der Show der beiden Scotts hätte tun können, wäre gewesen, den Powerpoint wegzuschmeißen, das halbe Dutzend hochrangiger .NET-Leute auf Plastikstühle in der Mitte der Bühne zu setzen und sich mannhaft in die Scheiße zu hauen, während man vernünftig seine Position erklärt.

@willdean Die überwiegende Mehrheit der Leute, die sich die Build-Keynote oder die Sitzung von Scott² ansahen, hatte von vornherein keine Ahnung davon. Es ist vollkommen verständlich, dass sie dieses Missgeschick nicht ans Licht ziehen wollten und Hunderttausende von Entwicklern genauso verwirrt zurückließen wie diesen Thread, wenn es nur ein Fehler war und sie beschlossen hatten, die Entscheidung trotzdem rückgängig zu machen.

Lassen wir dem Team etwas Spielraum und hoffen auf eine gute Erklärung/Postmortem nach dem Build :smile:

Die überwiegende Mehrheit der Leute, die die Build-Keynote oder die Sitzung von Scott² sahen, hatte von vornherein keine Ahnung, dass dies vor sich ging.

Das ist ein fairer Punkt.

@FransBouma Sie können netstandard2.0 unterstützen, aber es wird in Bezug auf Polyfills, Cross-Compils und zusätzlichen Code schmerzhaft sein. Einige Funktionen sind möglicherweise auch praktisch unmöglich zu implementieren, bis bestimmte neue Funktionen vorhanden sind, wie z. B. http2.

Aber es ist nicht unmöglich. Es ist nur eine Menge zusätzlicher Arbeit, die jeder lieber nicht machen würde.

Das gesamte Kernökosystem ist ein Balanceakt zwischen Innovation und Legacy-Unterstützung. Wir brauchen genug Legacy-Unterstützung, um schließlich die meisten Sachen auf Core zu haben, aber genug Innovation, um Core zu einer attraktiven Plattform zu machen.

Ich hoffe auf eine gute Obduktion, aber es genügt, sie hier anzusprechen. Das Posten eines Blogbeitrags würde nur die 99 % verwirren, die nicht wussten, dass dies jemals ein Problem war.

@hallatore "Es ist nur eine Menge zusätzlicher Arbeit, die jeder lieber nicht machen würde."
Ich kann das gut nachfühlen. Ich persönlich würde morgen lieber grün anfangen, aber niemand gibt "mir" diese Option ... weil Sie wissen, Realität ...

Vergessen wir nicht, dass ASP.Net ein „Ökosystem“ mit CMS, Bibliotheken von Drittanbietern, Komponenten und Software ist, das über eine Lebensdauer von 17 Jahren aufgebaut wurde. Sie können nicht einfach den Ball auf Ihr Ökosystem und Ihre Community werfen und sagen, dass wir wirklich ausgefallene Saiten verwenden wollen, auch wenn es bedeutet, Sie alle zurückzulassen ... Sie "können einfach nicht" ... es ist das Schlimmste, was Sie tun könnten eine unterstützende Gemeinschaft.

Wenn Sie von Fortschritten profitieren möchten, erstellen Sie auf jeden Fall plattformspezifische Codepfade und profitieren Sie davon. Auf diese Weise wird die Benutzerbasis im Laufe der Zeit wechseln, um Plattformunterschiede zu nutzen. Aber unter keinen Umständen ist es eine kluge Option, die "Bedürfnisse" eines großen Teils Ihres Ökosystems zu ignorieren.

@hallatore

Sie können netstandard2.0 unterstützen, aber es wird in Bezug auf Polyfills, Cross-Compils und zusätzlichen Code schmerzhaft sein. Einige Funktionen sind möglicherweise auch praktisch unmöglich zu implementieren, bis bestimmte neue Funktionen vorhanden sind, wie z. B. http2.

Nö. Es ist nur Code, C#, geschrieben und dann ausgeführt. Ich musste ernsthaft lachen, als ich die Liste der Dinge las, die sie anscheinend auf .net full nicht tun können, und musste deswegen die Pause mit .net full einlegen. Es ist nur Politik. Wir Außenstehenden müssen sehr schnellen Code auf .NET full schreiben, uns mit diesen API's auseinandersetzen und das Beste daraus machen. Das machen wir. Wir lösen dieselben Probleme, mit denen sie auch arbeiten müssen. Das können sie auch. Das wollen sie einfach nicht. Aber ehrlich gesagt bin ich zu alt und habe mich zu oft mit Microsoft-Soaps beschäftigt, um das noch ernst zu nehmen. Lassen Sie sie die interne Politik in Redmond behalten und lassen Sie die Benutzer (uns!) nicht darunter leiden. Wie wir das schon oft getan haben, wohlgemerkt.

Ich hoffe auf eine gute Obduktion, aber es genügt, sie hier anzusprechen. Das Posten eines Blogbeitrags würde nur die 99 % verwirren, die nicht wussten, dass dies jemals ein Problem war.

Ja, ein Blogbeitrag ist nicht der richtige Ort. Dieser Thread ist der perfekte Ort dafür, wie sie es jetzt lösen werden.

@FransBouma

Core enthält viele neue Funktionen, die aufgrund der Forschung in asp.net Core und Kestrel entwickelt wurden. Es liegt nicht an C#, sondern daran, dass der Code Dinge verwendet, die nicht im vollständigen Framework vorhanden sind.

Wie @davidfowl sagte. Sie haben Polyfills für die meisten aktuellen Sachen. Aber sie fangen an, Dinge zu sehen, die sie nicht einmal polyfill können. Das bedeutet, dass sie höchstwahrscheinlich entweder Dinge löschen oder Änderungen am gesamten Framework vornehmen müssen. Und die Arbeit, die erforderlich ist, um neue Funktionen in das vollständige Framework im Vergleich zum Kern zu bringen, ist enorm und hat einen viel längeren Zeitrahmen.

Und dann sind wir wieder beim Balanceakt. Sollten wir den Kern aufgrund des vollständigen Frameworks einschränken, oder sollte der Kern in der Lage sein, Innovationen in einem höheren Tempo zu entwickeln, als es asp.net jemals könnte?

Ich verstehe sehr gut, warum sie nur Core unterstützen wollten. Und aus rein technischer Sicht fügt die Unterstützung des vollständigen Frameworks eine Menge Dinge hinzu, die sie jetzt berücksichtigen müssen. Aber das Ökosystem und die Community sind nicht nur für den Core bereit (wie wir deutlich sehen), und der Preis dafür ist eine komplexere asp.net-Core-Entwicklung.

@hallatore Wenn Sie die Kompatibilität brechen möchten, kündigen Sie dies im Voraus an und kündigen Sie einen Migrationspfad an. Auf die eine oder andere Weise investieren Sie, um Ihren Benutzern einen Migrationspfad zu geben.

Dies ist mehr oder weniger der Preis dafür, Benutzer zu haben, und Benutzer zu haben, ist kein Ärgernis, es ist eine Verantwortung.

Ich glaube nicht, dass wir darüber diskutieren, ob es mehr Arbeit bedeutet, mehr Plattformen zu unterstützen. Es ist. Die Kosten sind höher, die Codepfade sind komplizierter usw. usw. Können Sie diese Kosten loswerden und eine einzelne Plattform wählen? Nun, die meisten Antworten hier, also die Stimme der Community, sagen, dass das Ökosystem zu diesem Zeitpunkt noch nicht bereit ist. Was bedeutet, dass es verantwortungsbewusst ist, eine Art Mittelweg zu finden.

@hallatore

Core enthält viele neue Funktionen, die aufgrund der Forschung in asp.net Core und Kestrel entwickelt wurden. Es liegt nicht an C#, sondern daran, dass der Code Dinge verwendet, die nicht im vollständigen Framework vorhanden sind.

Nun, dann portieren Sie es rüber. Sie besitzen beide, ich verstehe nicht , warum es ein Problem gibt. Wohlgemerkt: Sie können den Code portieren, indem sie einfach eine netstandard2.0-Bibliothek erstellen, oder noch besser: Shim erstellen, das auf die schnellere Implementierung in .net core und eine langsamere Implementierung in .net full abzielt (mit zB einer lib von nuget).

Ich generiere IL zur Laufzeit, um superschnelle Projektionen von Datenlesern in meinem ORM zu erhalten. Ich werfe meine Hände nicht in die Luft 'geht nicht!', da es niemand für mich lösen wird. Ich wette, Sie hatten ähnliche Probleme, bei denen Sie sich einfach einarbeiten und dafür sorgen mussten, dass es funktioniert, da sonst niemand die Rechnung übernehmen würde. Das müssen sie jetzt auch.

Sie haben Polyfills für die meisten aktuellen Sachen. Aber sie fangen an, Dinge zu sehen, die sie nicht einmal polyfill können. Das bedeutet, dass sie höchstwahrscheinlich entweder Dinge löschen oder Änderungen am gesamten Framework vornehmen müssen. Und die Arbeit, die erforderlich ist, um neue Funktionen in das vollständige Framework im Vergleich zum Kern zu bringen, ist enorm und hat einen viel längeren Zeitrahmen.

Tut mir leid, aber welche Dinge können sie nicht "polyfill"? Ja, sie haben auf .NET Full ein schreckliches Durcheinander angerichtet und die Leistung ist an manchen Stellen schrecklich, und damit die Dinge wie die Konkurrenz funktionieren, müssen sie schwierige Entscheidungen treffen. Nun, lösen Sie es. Und nicht in irgendeiner Ecke, sondern das Kernproblem lösen: Auf Java konnten sie es auch lösen, ihre Leistung ist erstaunlich, und sie haben das getan, indem sie keine Kern-API kaputt gemacht oder eine zweite Plattform erstellt haben. Es ist nur Software: Behalten Sie die Schnittstelle bei, lösen Sie das Backend. Ja, es ist eine Menge Arbeit, aber glauben Sie, dass die Erstellung von zB einem ORM fast über Nacht erledigt ist? :) Oder dafür sorgen, dass ein Webservice gut funktioniert, damit er die kritische Geschäftslogik für ein großes Unternehmen ausführen kann? Nein, es kostet Mühe. Und das ist in Ordnung.

Der eigentliche Elefant im Raum hier ist .NET voll und wie es verwaltet wird. Oder besser: das fehlende Management dort. Ich weiß, dass sie keine Breaking Changes einführen können. Nun, dann führen Sie Änderungen ein, die nicht kaputt gehen. Wenn Sie sich Win32 ansehen, haben sie nie eine bahnbrechende Änderung eingeführt. Sachen funktionieren einfach. Ja, die Dinge wachsen und die Gruppe derer, die lieber alles streichen würden, wird von Tag zu Tag wachsen, aber das ist irrelevant: Wir alle beschäftigen uns mit Software, die Teile hat, die einmal wichtig waren und jetzt nicht mehr so ​​wichtig sind, aber wir können sie nicht zurücklassen. Schneiden Sie sie aus und ändern Sie sie nicht, da dies den Code der Leute brechen würde.

Und dann sind wir wieder beim Balanceakt. Sollten wir den Kern aufgrund des vollständigen Frameworks einschränken, oder sollte der Kern in der Lage sein, Innovationen in einem höheren Tempo zu entwickeln, als es asp.net jemals könnte?

Es wurde ein paar Mal erwähnt, aber ich sehe nicht ein, warum Sie nicht mit der gleichen Geschwindigkeit das gesamte Framework innovieren können. Wir alle müssen unsere eigene Software auf .net vollständig erneuern. Ich verstehe, dass es Engpässe gibt, z. B. bei der Zeichenfolgenunterstützung, aber wenn Sie eine Zeichenfolge ohne Kopieren benötigen, erstellen Sie eine und fahren Sie fort. Ja, Sie können für die nächsten zehn Jahre Fahrrad fahren, wie hässlich es ist, oder Sie können diese Klasse einführen, Ihr schnelles Zeug darauf aufbauen und Fortschritte machen. Ich habe in letzter Zeit ziemlich viel C++/x64-Assembler auf Win32 gemacht, und wenn Sie sehen, wie oft sie dort Zeichenfolgen neu definiert haben und anscheinend niemand ein Auge darauf geworfen hat, werden wir in .net völlig in Ordnung sein. Ich meine, wir haben bereits zwei String-Typen (Array of Char und String).

Ich verstehe sehr gut, warum sie nur Core unterstützen wollten. Und aus rein technischer Sicht fügt die Unterstützung des vollständigen Frameworks eine Menge Dinge hinzu, die sie jetzt berücksichtigen müssen. Aber das Ökosystem und die Community sind nicht nur für den Core bereit (wie wir deutlich sehen), und der Preis dafür ist eine komplexere asp.net-Core-Entwicklung.

Ob Sie es glauben oder nicht, ich verstehe auch voll und ganz, warum sie sich von .NET Full lösen wollen. Ich meine, meine eigene Runtime/API ist an manchen Stellen 14 Jahre alt, auch ich möchte mich gestern von einigen Teilen davon lösen. Allerdings habe ich auch gelernt, dass ich das nicht kann, weil meine Kunden dadurch verletzt werden und das schlecht für sie und für mich ist. Wenn Sie eine Plattform / Runtime / API erstellen, müssen Sie berücksichtigen, dass Sie sich nach der ersten Veröffentlichung auf einem Weg befinden, den Sie nicht mehr verlassen können: Ihre API ist von diesem Moment an in Stein gemeißelt. Sie können den Mist daraus ablehnen, aber Sie können keine Dinge entfernen, damit Benutzer davon kaputt gehen. Angular 1.x->2.x, Python 2.x->3.x, Beispiele genug.

Sie können keine Änderungen an BCL-Primitiven in ein netstandard-Paket packen. Wenn Sie System.String und System.Int32 ändern möchten, benötigen Sie eine andere BCL.

Und Sie können das vollständige Framework nicht mit der gleichen Geschwindigkeit innovieren, da jedes Update auf das vollständige Framework ein direktes Update der vorherigen Version ist, mit Milliarden von Codezeilen in freier Wildbahn, abhängig von jeder möglichen Kombination von Funktionen (einschließlich undokumentierter Merkmale). Der Grund für schnellere Innovationen auf .NET Core liegt darin, dass Sie Anwendungen haben können, die auf alle verschiedenen Versionen von .NET Core abzielen, die alle isoliert auf demselben Server ausgeführt werden, jede mit ihrer eigenen Kopie der Laufzeitumgebung. Das ist der springende Punkt. Sie bauten es, damit sie schneller iterieren konnten. Jetzt wollen sie schneller iterieren können.

Ich persönlich denke, dass der Fehler in erster Linie darin bestand, volles .NET von ASP.NET Core zu unterstützen. Es hätte von Anfang an ein sauberer Bruch sein müssen.

Ich persönlich denke, dass der Fehler in erster Linie darin bestand, volles .NET von ASP.NET Core zu unterstützen.

Ehrlich gesagt brauchten sie 2.0-Werkzeuge und die Kompatibilitätsscheibe, um dies auch nur annähernd machbar zu machen, also ist dies meiner Meinung nach das früheste, was sie hätten tun können. Durch das Verzögern können Benutzer nur Conversions verzögern und Microsoft nicht darüber anschreien, wie sie ihre Benutzer hassen. Weißt du, wann immer sie das tun – mit welcher Art von Warnung auch immer – werden die Leute deswegen den verdammten Verstand verlieren.

Ehrlich gesagt macht mich der Großteil dieses Threads für die .NET-Community sehr traurig.

Sie können keine Änderungen an BCL-Primitiven in ein netstandard-Paket packen. Wenn Sie System.String und System.Int32 ändern möchten, benötigen Sie eine andere BCL.

Ja, ich weiß, und das wollte ich nicht sagen. Ich sehe, dass einige Leute meinen Beitrag in diesem Licht falsch interpretiert haben, aber das war nicht das, was ich beabsichtigt habe. Wenn ich darf, möchte ich ein Beispiel geben, das hier zum Thema ist: In meinem ORM verwende ich auch String-Verkettung, um Abfrage-Strings zu erstellen. Dies ist ein enormer Overhead für jedes ORM. Die Verwendung der Standard-String-Klasse dafür ist bis zu einem gewissen Punkt hilfreich, wird aber mit all dem Kopieren hässlich. Also habe ich spezielle Klassen eingeführt, die dieses Kopieren stark abmildern oder ganz vermeiden. Dies hat Nachteile, da Sie sie nicht dort verwenden können, wo ein Zeichenfolgentyp ausreichen würde, und Sie können sie auch nicht mit allen APIs verwenden, die eine Zeichenfolgeninstanz verwenden. Sie _können_ sie jedoch dort einsetzen, wo Sie sie selbst am meisten brauchen: auf dem Hotpath durch Ihren eigenen Code.

Das ist _bei weitem_ nicht ideal, und wenn man das vermeiden kann, sollte man das natürlich tun. Das Leben ist jedoch chaotisch und die Dinge, die wir veröffentlichen, bleiben für immer dort. Sie können Dinge, die bereits draußen sind, nicht ändern, also müssen Sie sich mit dieser Situation auseinandersetzen, und eine der Lösungen dafür besteht darin, neue Typen und neuen Code einzuführen, der mit diesen Typen arbeitet. Dieser Ansatz wird seit vielen Jahren in allen wichtigen Betriebssystem-APIs verwendet, und obwohl er scheiße ist, weil er hässlich ist, ist er eine bewährte Methode, um voranzukommen, anstatt in einer festgefahrenen Vergangenheit zu verharren.

Eine andere bewährte Methode, um voranzukommen, anstatt in einer festgefahrenen Vergangenheit zu verharren, besteht darin, einfach zu akzeptieren, dass Hasser die Dinge sowieso hassen und kaputt machen werden (vgl. Angular 2+ und Python 3, die beide gut funktionieren).

@NickCraver Ich wette mit dir um 100 Dollar, dass jedes Mal, wenn sie endlich diese Pause machen, egal ob es 3.0, 2.2 oder 23.5 ist, es genauso viel Klagen und Zerreißen von Kleidungsstücken aus der Erdnussgalerie geben wird wie heute.

Eine andere bewährte Methode, um voranzukommen, anstatt in einer festgefahrenen Vergangenheit zu verharren, besteht darin, einfach zu akzeptieren, dass Hasser die Dinge sowieso hassen und kaputt machen werden (vgl. Angular 2+ und Python 3, die beide gut funktionieren).

Sicher. Beides hat jedoch Konsequenzen: Die Methode „OS API“ ist hässlich und führt über die Jahre zu einer großen API mit vielen Sackgassen. Die 'Angular/Python'-Methode unterbricht den Upgrade-Pfad der Leute und spaltet Gemeinschaften (keine Ahnung, wie fragmentiert die eckige Welt ist). Angesichts des ASP.NET-Kerns weiß ich nicht, welcher Weg besser ist. Aus technischer Sicht ist natürlich die Python-Route vorzuziehen. Aus Stabilitätssicht tötet es iMHO.

So ziemlich jeder in der Angular-Welt sagte: „Oh, ja, das ist _viel_ besser“ und begann mit der Migration. Python ist derzeit eine der am schnellsten wachsenden Sprachen, und es ist Python 3, das dies vorantreibt.

Ich persönlich denke, dass der Fehler in erster Linie darin bestand, volles .NET von ASP.NET Core zu unterstützen. Es hätte von Anfang an ein sauberer Bruch sein müssen.

Natürlich bringt diese Idee einige Kosteneinsparungen mit sich, aber es ist das komplette Gegenteil von der Art und Weise, wie MS seine völlig dominierende Position aufgebaut hat:

  • Windows führte DOS-Anwendungen aus
  • 32-Bit-Windows führte 16-Bit-Windows-Anwendungen und DOS-Anwendungen aus
  • 64-Bit-Windows führt 32-Bit- und 64-Bit-Anwendungen aus
  • .NET-Anwendungen liefen bei ihrer Veröffentlichung auf allen relevanten Betriebssystemen

Dies waren enorm schwierige technische Herausforderungen und enorm kostspielige Kompromisse, aber sie haben einer ganzen Generation von Menschen, die Dinge mit Computern erledigen müssen, versichert, dass MS auf lange Sicht ungefähr auf ihrer Seite ist.

Es ist schwer, nicht auf das zurückzublicken, was technisch an Dingen wie der Win32/Win16-Interop-Geschichte oder dem Ausführen von DOS-Anwendungen auf Win3 -> Win95 -> WinNT beteiligt war, und sich zu fragen, ob die Erwachsenen das Gebäude schon vor einiger Zeit verlassen haben.

@markrendle

So ziemlich jeder in der Angular-Welt sagte: „Oh, ja, das ist viel besser“ und begann mit der Migration.

Sie wollen Angular ehrlich mit der .NET-Laufzeit vergleichen? Die meisten Menschen würden gerne sofort zu .NET Core migrieren. Aber realistisch gesehen können sie das einfach nicht. Entweder sind nicht viele Abhängigkeiten verfügbar, oder das Risiko ist zu hoch oder die Kosten sind einfach zu hoch.

@markrendle

So ziemlich jeder in der Angular-Welt sagte: „Oh, ja, das ist viel besser“ und begann mit der Migration. Python ist derzeit eine der am schnellsten wachsenden Sprachen, und es ist Python 3, das dies vorantreibt.

Ich denke, Sie überspielen die Tatsache, dass Python 3 seit 9 Jahren auf dem Markt ist und endlich zum Standard-Python für neue Projekte wird. Mein Mac mit dem neuesten OSX ... kommt jedoch mit Python 2.7.12. Mein NAS, das gleiche.

Dasselbe gilt für Angular – es ist großartig, wenn Sie eine schnuckelige kleine Demo-App schreiben, die Sie innerhalb weniger Stunden auf Angular2 portieren können. Hier draußen in der realen Welt verwenden wir immer noch Angular 1, weil die Migration einer 2-3 Jahre alten großen Anwendung kein trivialer Aufwand ist. Das Portieren kostet Zeit und Geld, und das Geschäft will eine Rechtfertigung.

Ist es möglich, einen Softwaretreiber wie den IA-32 Execution Layer zu erstellen?

@bradwilson

Ehrlich gesagt macht mich der Großteil dieses Threads für die .NET-Community sehr traurig.

Wollen Sie Microsoft hier keine Schuld für ihre Fehltritte geben, die uns überhaupt hierher gebracht haben? .NET Core sollte ein sauberer Bruch sein. Dann war es nicht. Die Tatsache, dass sie es „.NET Core“ genannt haben, impliziert, dass Sie wissen, dass der Kern von .NET vorhanden ist, oder? Und was ist .NET? Nun, in den letzten 15 Jahren war es .NET Full Framework. Wenn Microsoft einen sauberen Bruch wollte, hätte es einen neuen Namen für dieses Ding wählen, bei seinen Waffen bleiben sollen, anstatt zurückzugehen und alle alten APIs wieder einzuführen, und die Leute zwischen der alten Welt und der neuen wählen lassen sollen. Die Entscheidung, bei der sie jetzt einen Rückzieher machen, hätte Projekte in eine von drei Situationen gebracht:

  1. Sie verwenden ASP.NET MVC auf dem vollständigen Framework und können auf ASP.NET Core 1.X auf dem vollständigen Framework portieren, aber danach sind Sie SOL, bis Sie zu .NET Core wechseln.
  2. Sie verwenden ASP.NET Core 1.X im vollständigen Framework und müssen auf .NET Core portieren, um zu ASP.NET Core 2.0 zu wechseln
  3. Sie arbeiten an ASP.NET Core auf .NET Core.

Unter der Annahme, dass Microsoft vorangegangen war und ASP.NET Core 2.0 nicht im gesamten Framework unterstützt hatte, hatten die Leute in den Situationen 1 und 2 keinen klaren/realistischen Weg, um vorhandene Anwendungen auf ASP.NET Core 2.0 zu verschieben. Die Leute in Situation 1 könnten es verstehen, aber die in Situation 2 wären zu Recht wütend. Situation 2 mag eine kleine Gruppe sein, aber hier sprechen wir von Microsoft, nicht von einem winzigen Open-Source-Projekt, das von einem Typen betrieben wird. Die Lebensgrundlagen von Unternehmen / Menschen hängen von diesen Systemen ab. Wenn sie sich nicht auf Microsoft verlassen können, können Sie beim nächsten Mal darauf wetten, dass sie die Plattform nicht nutzen werden. Vertrauen zählt. In Shops, die den Einsatz eines Microsoft-Stacks erwägen, würden Gegner dies als Warnung verwenden.

Ich schiebe die Schuld für dieses Problem auf Microsofts schreckliches Messaging / Marketing / Benennung von .NET Core. Man kann es nicht immer allen recht machen, aber die halbe Miete besteht darin, von Anfang an die richtigen Erwartungen zu setzen.

@MartinJohns Ich habe auf den vorherigen Kommentar geantwortet.

@markrendle warum lachen? erkläre bitte. Wenn die "API ziemlich gleich ist", können die grundlegenden Änderungen wie die Zeichenfolgen möglicherweise auf diese Weise behandelt werden. und Wenn es Änderungen in der API gibt, könnte es ein separates Paket geben, nur wenn jemand es verwenden möchte, in .Net Core?

OK Jungs - denken Sie an den Internet Explorer. Microsoft tötet es _endlich_. Natürlich haben sie so lange damit gewartet, dass ihr Ersatzbrowser Edge wahrscheinlich immer noch auf dem Markt geboren wird. Jeder benutzt nur Chrome. Und dennoch gibt es viele Orte, an denen Leute den IE verwenden, weil es keinen geschäftlichen Wert hat, ihre Apps auf die Verwendung eines modernen Browsers zu aktualisieren, und es gibt immer noch Leute, die sich darüber beschweren, dass Microsoft so langsam den Stecker zieht.

ASP.NET Core ist Microsofts Versuch, .NET durch etwas zu ersetzen, das auf dem basiert, was wir alle in den letzten 15 Jahren oder so gelernt haben. Entwicklern die weitere Verwendung der .NET Windows-Frameworks zu erleichtern und gleichzeitig die neuen ASP.NET Core-Features bereitzustellen, riecht sehr nach IE 9. Es ist besser, die Unterstützung für .Net 4.x an die Support-Lebensdauer des Betriebssystems zu binden, auf dem sie ausgeliefert wurden und fahre fort.

@glennsills Mir fehlt die Parallele zwischen IE & Edge. IE wird immer noch mit Windows ausgeliefert, da einige Dinge in Edge nicht funktionieren. Ich bin nicht sauer, dass Edge das VPN meiner Arbeit nicht unterstützt - es ist in Ordnung ... es ist ein anderer Browser. Es hat sogar einen völlig anderen Namen, also habe ich keine vorgefasste Meinung, dass es ActiveX unterstützen sollte;)

@glennsills auf welche fehler beziehst du dich?

@markrendle „So ziemlich jeder in der Angular-Welt sagte: „Oh, ja, das ist viel besser“ und begann mit der Migration.“

Sie tun Ihren Argumenten wirklich einen Bärendienst, wenn Sie solche schlechten Beispiele auswählen. Wenn überhaupt, kostete sie die Art und Weise, wie sie den Übergang gemeistert haben, ihren Vorsprung (den sie damals mit großem Abstand hatten).
Dasselbe gilt für Python 3 - die Fragmentierung hat jeglichen Schwung, den sie seit Jahren hatten, zunichte gemacht.

Also, ich versuche hier nur etwas zu verstehen.
Ich hatte vor, eine alte Asp-Webformularanwendung, die .Net-Remoting verwendet, in eine Asp-.Net-Core-MVC-Anwendung umzuwandeln. Mein Plan war es, .Net Remoting weiter zu verwenden, bis wir die Chance bekommen, diesen Mist von unserem System zu entfernen. Wie es sich anhört, wenn ich Asp .Net Core 2.0 als Ziel habe, kann ich das nicht tun? Aber wenn ich auf Net Core 1.1 abzielen würde, würde ich?

@wbuck Seit gestern ist die Geschichte so, dass Sie nur in einer einzigen Vorschauversion von ASP.NET Core 2.0 nicht in der Lage sein werden, gegen das vollständige Framework zu bauen. Vermutlich werden sie diese Fähigkeit in 2.0-preview-2 zurückbringen. Im Moment könnten Sie also auf 1.1 abzielen, aber nicht auf 2.0-preview-1.

Wer weiß, wie die längerfristige Zukunft aussieht – der gesamte Rahmen wird eindeutig irgendwann fallen gelassen – die Zeitskala ist unklar.

@ popcatalin81 Nun, wenn Sie auf mehreren Plattformen laufen möchten, ist der Zugriff auf COM-Objekte definitiv ein Fehler. Es gibt viele Dinge wie diese, die möglicherweise keine "Fehler" sind, wenn Sie nur unter Windows laufen, aber wenn Sie plattformübergreifend arbeiten möchten. Denken Sie an die Kopplung von AspNET an IIS. Zu der Zeit war es in Ordnung, aber im Laufe der Zeit machte es den Stack hyperkompliziert (sogar unter Windows) und machte das Ausführen von Anwendungen auf anderen Webservern zu einem Problem. Das standardmäßige Fehlen von Dependency Injection in ASP.NET macht das Testen von Komponenten wie Controllern zu einer echten Belastung. Dies ist weniger ein "Fehler", als vielmehr ein Beispiel dafür, wie die Zeit voranschreitet und Menschen verstehen, wie man Dinge besser macht.

@ GiorgioG - ja, das ist irgendwie mein Punkt. Sie können unter Windows 10 zwischen IE und Edge wählen, aber Sie müssen _wählen_. Sie erhalten keine IE-Funktionen in Edge, und das ist Absicht - IE- und Edge-Funktionen gleichzeitig in einem Prozess zum Laufen zu bringen, wäre ein heißes Durcheinander. Außerdem ist die zukünftige Unterstützung für IE auf Fehlerbehebungen beschränkt. Wenn Microsoft dies vor 10 Jahren getan hätte, wäre Edge für Chrome viel konkurrenzfähiger als jetzt. Daher denke ich, dass Microsoft .NET Classic noch einige Zeit unterstützen sollte, aber eher in einem Bugfix-Modus. Asp.Net Core sollte sich auf die plattformübergreifende einfache Entwicklung und Leistung konzentrieren.

Gibt es eine offizielle Ankündigung für die Absage?

@pantonis

Gibt es dazu eine offizielle Ankündigung?

Nein, da ist kein. Es gibt widersprüchliche Aussagen von verschiedenen Teammitgliedern. @DamianEdwards und @davidfowl sagten in dieser Ausgabe, dass es eine bewusste Entscheidung war, die Unterstützung einzustellen. Jeffrey schrieb im ASP.NET-Blogbeitrag, dass die Unterstützung für .NET fortgesetzt wird. Aber sie haben sich nicht aufeinander bezogen.

Hallo Leute,

Ich bin diesmal nicht auf den Problemthread gesprungen, aber ich bin sehr zufrieden mit der Zeit, die es gedauert hat, die Nachricht und die Richtung zu korrigieren.

Ich verstehe, dass die anfängliche Entscheidung in letzter Minute getroffen wurde, alles vor BUILD zum Laufen zu bringen. Es ist auch sehr beruhigend, dass Sie beabsichtigen, .NET Standard 2.0 auszuführen.

Nochmals vielen Dank an das .NET-Team für das schnelle Feedback und den Versuch, unsere Anforderungen trotz all der unproduktiven Kommentare zu erfüllen.

Sehr geschätzt.

@MartinJohns Oh Junge.. Also, wer hat Recht?

@wbuck

Ihre zukünftige Verwendung von .NET Remoting ist ein Symbol für die Probleme, die durch das Versprechen von Abwärtskompatibilität entstehen. Remoting hat aus verschiedenen Gründen einfach nicht funktioniert, aber weil die Leute es in der Vergangenheit verwendet haben (um fair zu sein, weil ihnen jemand bei Microsoft gesagt hat, dass dies eine gute Idee sei), wollen sie es immer noch verwenden. Der Zugriff auf Informationen in einer ASP.NET Core-Anwendung über die WEB-API ist recht einfach und kann von sehr alten .NET @@frameworks aus aufgerufen werden.

Wie ein bissiger Kollege von mir einmal sagte: „Wir müssen aufhören, neue Legacy-Anwendungen zu entwickeln“. Genau das tun Sie, indem Sie eine ASP.NET-Serveranwendung erstellen, die .NET Remoting unterstützt.

@pantonis Ehrlich gesagt, keine Ahnung. Viele Leute in dieser Ausgabe springen ab und nehmen den Blogbeitrag sofort als Umkehrung der in dieser Ausgabe getroffenen Entscheidung, weil sie später kam. Aber ich glaube, die Aussagen in dieser Ausgabe und im Blogbeitrag wurden unabhängig voneinander gemacht, und wir haben immer noch keine klare Aussage.

@pantonis die neueste ist die offizielle Ankündigung im Blogbeitrag

https://blogs.msdn.microsoft.com/webdev/2017/05/10/aspnet-2-preview-1/

Vorschau 1 Ausgaben

Diese Vorschauversion von ASP.NET Core 2.0 wird nur mit Unterstützung für das .NET Core 2.0 SDK geliefert. Unser Ziel ist es, ASP.NET Core 2.0 auf .NET Standard 2.0 auszuliefern, damit Anwendungen auf .NET Core, Mono und .NET Framework ausgeführt werden können.

Als das Team die letzten Probleme vor Build bearbeitete, stellte sich heraus, dass die Vorschau von ASP.NET Core 2.0 APIs nutzte, die außerhalb von .NET Standard 2.0 lagen, wodurch verhindert wurde, dass es auf .NET Framework ausgeführt werden konnte.

Aus diesem Grund haben wir die Unterstützung von Preview 1 für .NET Core nur eingeschränkt, damit ein Entwickler beim Upgrade einer ASP.NET Core 1.x-Anwendung auf ASP.NET Core 2 Preview unter .NET Framework nicht beeinträchtigt wird.

@benaadams Aber die Aussage in diesem Blogbeitrag ergibt keinen Sinn im Zusammenhang mit den hier gemachten Aussagen. In dem Blogbeitrag erwähnen sie nur, dass es "aufgedeckt" wurde und dass sie die "Vorschau 1-Unterstützung" eingeschränkt haben. In dieser Ausgabe haben sie die ganze Zeit etwas anderes erwähnt. Und sie haben keinen Bezug auf die Diskussion hier im Blogbeitrag genommen.

Es wäre großartig, wenn wir eine offizielle Bestätigung der Aussagen im Blogbeitrag hier in dieser Ausgabe erhalten könnten. Oder lassen Sie den Blogbeitrag die hier geführte Diskussion anerkennen. Etwas, von dem wir wissen, dass diese verschiedenen Personen sich der Aussagen der anderen bewusst sind.

Der Blogbeitrag ist eine offizielle Mitteilung, die die inoffizielle Community-Diskussion, die wir hier hatten, eindeutig ersetzt. Und wenn es nicht ganz zusammenpasst, nun, ich bin mir sicher, dass wir alle die Anforderungen der Unternehmenskommunikation verstehen und dass es wichtiger sein kann, die richtige Geschichte dem richtigen Publikum zu erzählen, als technisch korrekt zu sein.

Es besteht keine Notwendigkeit zu versuchen, bestimmte Leute dazu zu bringen, ihre Worte oder ähnliches zu essen - was wichtig ist, ist, dass die gewählte Richtung gut zu sein scheint, was, wie wir mit Sicherheit folgern können, auf unser Feedback reagiert hat.

Ich hoffe, dass Microsoft eine Erklärung herausgibt, die die Verwirrung beseitigt. Komm schon, MS, du schaffst das!!!

@pantonis @MartinJohns

Ich kann das nur inoffiziell bestätigen, da ich nicht bei MS bin.
Der Blogbeitrag von gestern ist der Plan für die Zukunft, und diejenigen, die am asp.net-Kern arbeiten, stimmen sehr gut damit überein.

tl;dr: Dies ist der Plan für die Zukunft: https://blogs.msdn.microsoft.com/webdev/2017/05/10/aspnet-2-preview-1/

@pantonis Die offizielle Ankündigung ist die offizielle Erklärung.

Aussage?

@PinpointTownes : Vielleicht sollten Sie dieses Problem erneut öffnen, da es nicht so klar ist, wie Sie denken.

Fertig 😄

@pantonis nur ein paar Kommentare oben.

https://github.com/aspnet/Home/issues/2022#issuecomment -300774201

Ich hoffe, dass Microsoft eine Erklärung herausgibt, die die Verwirrung beseitigt. Komm schon, MS, du schaffst das!!!

Um ihnen gegenüber fair zu sein, sie sind diese Woche viel zu sehr damit beschäftigt, in einem Zustand erzwungener Superaufregung herumzutänzeln, um hier Zeit zu verschwenden. Und angesichts der Tatsache, dass jede Erklärung von .NET Core, die jemals gegeben wurde, nur dazu gedient hat, das Verständnis in der Welt zu verringern , ist es vielleicht besser, die Dinge einfach liegen zu lassen.

Nur um die Dinge für alle, die bis hierher lesen, klarer zu machen ...

Wenn eine neuere offizielle Ankündigung irgendetwas in diesem Thread widerspricht, sollten wir die öffentliche offizielle Ankündigung als außer Kraft setzend betrachten, was zuvor in diesem Thread gesagt wurde.

Offizieller Blogbeitrag > GitHub-Kommentar

Es steht nirgendwo geschrieben, aber für mich gilt diese Regel seit langem.

@ Maxim Rouiller

Wenn es nicht der Fall wäre, würde @benaadams es wahrscheinlich wissen.
Und ich habe vor ein paar Stunden auch mit @davidfowl gesprochen. Die Ankündigung ist richtig.

Bearbeiten: Diese Ankündigung: https://blogs.msdn.microsoft.com/webdev/2017/05/10/aspnet-2-preview-1/

@hallatore Welche Ansage? Auf dem ASP.NET-Blogbeitrag von Jeffrey oder dem anderen?

Lassen Sie es gehen.

Die Aussage lautet, dass .NET Framework in ASP.NET 2.0 Preview 1 nicht unterstützt wird; Sie planen jedoch, es danach zu unterstützen. Der Himmel fällt nicht mehr ein.

Sich im Nachhinein weiter darüber zu beschweren; wird wahrscheinlich rechtfertigen, dass sie sich weniger engagieren, weniger Ideen teilen, Menschen in frühen Stadien weniger einbeziehen, also Menschen in viel späteren Stadien informieren; mit mehr klinisch analysierten Reaktionen; wenn es auch schwieriger ist, die Richtung zu ändern.

Wenn Sie sich auf jemanden stürzen, weil er Ihrer Meinung nach eine falsche Entscheidung getroffen hat; dann ändern sie ihre Meinung basierend auf Ihrem Feedback; dann reiben Sie ihnen die Nase dafür, dass sie ihre Entscheidung geändert haben – wie wird sich das Ihrer Meinung nach auf zukünftige Beziehungen auswirken? Es wird sehr schnell dysfunktional werden.

Die neueren offeneren MS; die direkt mit Entwicklern und Kunden in Kontakt tritt, ist spannend. Bitte denken Sie nicht daran, dass Ihre Aktionen es beenden und alles erst über die Genehmigung der Öffentlichkeitsarbeit laufen lassen müssen. Das tut niemandem gut.

Seien Sie etwas professioneller und überlegen Sie, wie wir uns alle gemeinsam für ein besseres Ökosystem weiterentwickeln.

@benaadams Sie verwechseln den Wunsch nach klarer Kommunikation mit Beschwerde. Dies ist bei weitem kein Versuch, jemanden zu vertreiben, sondern der Wunsch, sich weiter zu engagieren und Verwirrung zu beseitigen. Sie sagen, dass sie aufgrund unseres Feedbacks ihre Meinung geändert haben – was großartig ist. Aber der Blogbeitrag erwähnt dies nicht, also ist es nur Ihre Vermutung, dass dies der Fall ist.

Diese bahnbrechende Änderung wurde schlecht angekündigt. Die offenbar rückgängig gemachte Entscheidung wurde schlecht angekündigt. Ich wünsche mir nicht weniger Engagement, sondern mehr Engagement.

@MartinJohns In öffentlichen Ankündigungen sprichst du über das JETZT und was IST.

Nicht, wie Sie zu diesem Punkt gekommen sind. Tatsache ist genau das, was @benaadams gesagt hat.

^Fügen Sie hier das GIF "Let it go" ein^

@benaadams stimmte zu. Es könnte jedoch eine gute Sache sein, dass innerhalb der Zeit (dh nach //build) einige weitere technische Informationen bereitgestellt werden, was die Konsequenzen für die Liste der von @davidfowl vorgeschlagenen Elemente sind, die auf .net vollständig schwierig/schwer zu erledigen waren, und warum sie dies tun brauchte den sauberen Bruch. Ich sehe keinen Grund, warum dies anderswo als in diesem Thread getan werden sollte, obwohl und informell, Entwickler für Entwickler. IMHO würde es mehr Einblick in zukünftige Pläne geben, was jetzt von Aspnetcore 2.0 zu erwarten ist und was jetzt in diesem Zeitrahmen nicht getan werden kann und daher verschoben werden muss. Es würde auch helfen, das Vertrauen von Leuten hier zurückzugewinnen, die den Thread nur gelesen haben (und ihre Schlussfolgerungen gezogen haben ...) und von Leuten hier, die immer noch Zweifel haben.

Da wir seit einigen Tagen eine sehr lange, gute Diskussion führen, würde ich hier in diesem Thread auch eher eine "offizielle" Ankündigung erwarten als plötzliches Schweigen und den Hinweis auf eine Ankündigung in einem Blog ohne Erwähnung dieser Diskussion .

Das ändert nichts daran, dass das natürlich eine gute Nachricht ist, wenn die Ankündigung stimmt.

Tut mir leid, aber ich möchte nur mein Verständnis davon klären

image

Wenn wir das obige Diagramm als Beispiel verwenden, sagen wir tatsächlich, dass die Zukunft von ASP.NET Core aufgrund der Langsamkeit nicht tatsächlich auf der .NET Standard-Schicht sitzen soll, sondern dass ASP.NET Core stattdessen auf .NET Core sitzen soll? welche zukünftige Version davon es in 2.0 oder 3.0 usw. sein wird.

also zum beispiel:-
.NET Core -> ASP.NET
oder wird es immer noch .NET Standard -> .NET Core -> ASP.NET Core sein

@lilpug Das ist die Art von Diagramm, das meinen (unbeliebten ;-) Punkt über die Erklärungen veranschaulicht, die die Dinge nur noch schlimmer machen. „.NET Standard“ ist keine Bibliothek, und ASP.NET Core sollte sich nicht in einer Box befinden, die ein Peer von .NET Framework ist.

Das Diagramm ist grundsätzlich falsch und Sie sollten es ignorieren.

Hallo @willdean , könnten Sie ein besseres Beispiel liefern, das angemessener ist?

Aber um ehrlich zu sein, habe ich es als Beispiel verwendet, um nicht auf .NET Standard als Bibliothek hinzuweisen, sondern eher um eine vererbte Position. Wenn ich die Terminologie beiseite lasse, würde ich immer noch gerne wissen, ob meine Ansicht dazu etwas richtig ist, was ich denke?

könnten Sie ein besseres Beispiel liefern, das angemessener ist?

Nein, ich denke, es widerspricht der Darstellung in einem Diagramm oder zumindest den Fähigkeiten der Autoren aller Diagramme, die ich gesehen habe. Selbst wenn @shanselman (ein vollendeter Kommunikator) einen Artikel schreibt, in dem er versucht, alles zu erklären, endet er mit einer Reihe von „terminologischen Genauigkeiten“, um es höflich auszudrücken.

Alle Versuche, ".net standard" in ein Diagramm zu integrieren, das eine Reihe von Codebibliotheken enthält, sind zum Scheitern verurteilt, da es sich um eine API-Spezifikation handelt, nicht um eine Bibliothek, und ihre Existenz daher orthogonal zu den Bibliotheken ist.

Das ASP.NET-Team sollte die Last der Wartung von ASP.NET übernehmen, das bei allem Respekt überhaupt nicht Angular ist. Sie sollten auch die Last bedenken, im Namen von Microsoft zu sprechen, obwohl dies formal nicht wahr sein mag, ist es sicherlich informell richtig, und das bedeutet auch, dass das, was das ASP.NET-Team tut (oder nicht tut), Schockwellen durch die Welt schickt gesamten Ökosystem und spiegelt direkt oder indirekt die Prioritäten von Microsoft wider.

Ein kurzes Beispiel ist die Unterstützung für AD: Ich weiß nicht, wie um alles in der Welt dies als optional angesehen werden kann. Oder besser gesagt, ich weiß, denn AD ist sicher ein Relikt aus der Zeit vor dem Internet und das ist etwas, das früher oder später auslaufen wird, aber Tatsache ist, dass, wenn Microsoft/DNF nicht einmal den Aufwand in Betracht zieht, AD auf seine zu portieren offiziellen ASP.NET Core-Framework (abgesehen von einem vagen Versprechen, dass es vielleicht vor dem Sommer hinzugefügt wird ...), lautet die Botschaft, dass die Technologie von Microsoft selbst an den Rand gedrängt wird. Abgesehen davon, dass die meisten Microsoft-Produkte AD benötigen, um zu funktionieren, wie zuversichtlich bin ich also, einen neuen Virtualisierungscluster mit AD zu erstellen, während Microsoft der Meinung ist, dass AD-Unterstützung nicht so wichtig ist? Das ist sicherlich die falsche Botschaft, es sei denn, Sie fügen hinzu: Hören Sie von nun an auf, AD zu Ihrer Infrastruktur hinzuzufügen. Das meinte ich, als ich sagte, dass die Entwicklung bei Microsoft auf unzusammenhängende Weise stattfindet.

Das ASP.NET-Team hat in diesem Thread erfahren, dass Menschen, wenn sie etwas sagen, Notfallsitzungen abhalten, hektisch nach Informationen suchen und denken, dass sie die falsche Wahl getroffen haben. Das passiert in der realen Welt, weil ASP.NET eine Kerntechnologie ist (Wortspiel beabsichtigt), keine einfache Bibliothek, die Sie ignorieren könnten, wenn alles gut funktioniert. Sie wollen also Stabilität UND Sie wollen auch Verbesserungen, weil Sie so mit Kerntechnologien arbeiten.

Ein weiteres dummes Beispiel: Der beliebte IdentityServer4 gab an, dass er nur ASP.NET Core 1.1 unterstützen wird. Wenn also jemand eine Core 1.0-Anwendung hat, die er nicht konvertieren kann, was soll er tun? Halten Sie es für fair, ihnen zu sagen, dass sie konvertieren sollten, um nicht bei alten Frameworks zu bleiben, wenn ihre Version ... was ... 4 Monate alt ist? es liegt an Ihnen ? Noch nie. Es liegt an Ihnen, Breaking Changes nur dann bereitzustellen, wenn es tatsächlich unvermeidlich ist, da die Gefahr besteht, die Entwickler zu fragmentieren und mittelfristig nur die Leute zum Wechsel zu zwingen.

Ehrlich gesagt, dieses Backtracking behebt nichts. Ich wusste, dass Open Source .NET die schlechteste Wahl war und meistens einen Rückzug von Microsoft implizierte. Wie jemand vor mir in diesem Thread sagte, ist .NET im Grunde ein Tool, um Azure jetzt zu unterstützen.

Es ist nicht so, dass Entwickler diese Änderung nicht akzeptieren wollen (oder Hasser, wie jemand sagte, als wären wir Schulkinder, die über Ihre Haarfarbe diskutieren): Sie haben es getan, aber ehrlich gesagt legt Microsoft nicht sein Gewicht hinter diese Entscheidung und nutzt die Änderung nicht, um sie zu verfolgen seine Geschäftsziele. Wir wussten, dass die Unterstützung des vollständigen .NET-Frameworks möglich war, und das war Politik. Und geschäftliche Anmerkungen und Kommentare sind hier viel wichtiger als technische, weil wir jedes technische Problem lösen können. Wenn dieser Thread Ihnen nicht beigebracht hat, dass das Problem nicht darin besteht, dass wir UTF8-Strings haben, sondern Menschen, die von diesen Technologien abhängig sind, um ihren Lebensunterhalt zu verdienen, ehrlich ...

Ist das zu viel Verantwortung für das ASP.NET-Team? Vielleicht. Wenn ja, überlassen Sie diese Entscheidungen einem „Superteam“, das die Verantwortung für das gesamte Ökosystem und die Plattform übernimmt.

Ich weiß nicht einmal, wie das auf GitHub diskutiert werden könnte.

@willdean ok, lass es uns anders ausdrücken "nicht in einem Diagramm" :),

Wenn ich beispielsweise eine Bibliothek in .NET Standard 2.0 erstelle, wird diese in ASP.NET Core (.NET Core) (zukünftig) unterstützt, wenn ja, dann bedeutet dies „NET Standard -> .NET Core -> ASP.NET Core „Wenn nicht, bedeutet dies, dass .NET Core wegbricht und die Basis von NET Standard nicht nutzt.

@lilpug Wenn eine Bibliothek .NET Standard ist, kann sie von allem in der darüber liegenden Ebene verwendet werden.

Eine .NET Standard-Bibliothek kann also von .NET Framework, .NET Core, Xamarin, Mono, Unity usw. verwendet werden, wie im Diagramm gezeigt.

.NET Standard ist das, was Bibliotheken idealerweise einhalten sollten, um eine größtmögliche Reichweite zu ermöglichen (und je niedriger die Version, desto größer die Reichweite).

Die Ebene darüber sind App-Modelle; es ist, was die Exes/ausführbaren Dateien sind. Sie sind die endgültigen Endpunkte.

Sie haben also eine .NET Framework-Exe, die nur unter Windows ausgeführt werden kann.

Eine ausführbare Xamarin-Datei; läuft auf iOS, Android, OSX (obwohl Sie jeweils 3 verschiedene ausführbare Dateien benötigen).

Eine .NET Core-Exe kann vollständig portabel sein und mit dem dotnet Launcher donet my.dll ausgeführt werden oder speziell ausgerichtete ausführbare Dateien für eine bestimmte Plattform Windows, Linux, MacOS, Tizen erstellen und nur auf diesen ausgeführt werden; und Sie können eine gezielte ausführbare Datei (in sich geschlossen) für alle spezifischen Plattformen aus demselben Code ausgeben; wenn du das machen willst.

Wenn ich beispielsweise eine Bibliothek in .NET Standard 2.0 erstelle, wird dies in ASP.NET Core (.NET Core) unterstützt.

Jawohl; und das war immer so. Selbst wenn die ASP.NET Core-Bibliotheken speziell auf .NET Core abzielten, konnten sie nur auf .NET Core verwendet werden; Sie könnten weiterhin .NET Standard-Bibliotheken in ASP.NET Core verwenden. Das wurde nie durch irgendetwas bewirkt, das in dieser Ausgabe angesprochen wurde.

@benaadams vielen Dank dafür, das macht viel mehr Sinn.

Da das zukünftige Endergebnis darin besteht, die Unterstützung für das vollständige .NET-Framework in ASP.NET Core einzustellen, sei es in der nächsten Version oder in zukünftigen Versionen, wollte ich für zukünftige Bibliotheken wissen, ob wir damit beginnen, sie „wenn möglich“ auf dem .NET-Standard zu erstellen anstelle von .NET Framework 4.6+ und ob dies dazu beitragen würde, uns zukunftssicherer für die Verwendung von ASP.NET Core zu machen und es für andere Schichten kompatibler zu machen.

Der Vortrag ist morgen, also müssen wir abwarten.

https://channel9.msdn.com/Events/Build/2017/C9L18

@LilPug

ok, sagen wir mal anders "nicht in einem Diagramm" :),

Wenn ich beispielsweise eine Bibliothek in .NET Standard 2.0 erstelle, wird diese in ASP.NET Core (.NET Core) unterstützt, wenn ja, dann bedeutet dies „NET Standard -> .NET Core -> ASP.NET Core“, wenn nicht dann es bedeutet, dass .NET Core wegbricht und die Basis von NET Standard nicht nutzt.

Siehe .NET Standard als Schnittstelle, die durch 2 Klassen implementiert wird, eine in .NET Core und eine in .NET Full. Es gibt auch andere Implementierungen, zB in xamarin und UWP. Es ist keine physische Schnittstelle, es ist hier wohlgemerkt eine Metapher. Wenn Sie nun Code schreiben, der auf diese _Schnittstelle_ abzielt, können Sie zur Laufzeit mit der Implementierung dieser Schnittstelle arbeiten, sei es eine Klasse in .net Core oder in .net full.

So wurde mit netstandard2.0 eine API-Schnittstelle definiert, die Implementierungen in verschiedenen Plattformen hat, zB .net core, .net full, xamarin, uwp. Sie können also eine Bibliothek schreiben, die mit netstandard2.0 kompatibel ist, was bedeutet, dass sie nur APIs verwendet, die in dieser Standard-API-Definition enthalten sind, und dies bedeutet, dass die Bibliothek auf allen Plattformen ausgeführt wird, die eine Implementierung dieser Schnittstelle haben.

Dass ASP.NET Core 2.0 mit netstandard2.0 kompatibel ist, bedeutet, dass sie nur APIs in netstandard2.0 verwenden, was bedeutet, dass ASP.NET core 2.0 auf allen Plattformen ausgeführt wird, die eine Implementierung von netstandard2.0 haben.

(Bearbeiten) drats, @benaadams ist mir zuvorgekommen.

@lilpug Wenn Sie .NET Standard-Bibliotheken erstellen und nur .NET Standard-Bibliotheken verwenden, ist alles in Ordnung und Sie sind zukunftssicher.

Die geäußerten Bedenken wurden von Personen geäußert, die Bibliotheken verwenden, die derzeit nicht mit .NET Standard kompatibel sind; Daher können diese Bibliotheken nicht auf .NET Core 2.0 ausgeführt werden

Da ASP.NET Core-Bibliotheken zu .NET Core 2.0-Bibliotheken gemacht wurden, bedeutete dies, dass sie nicht auf Full Framework ausgeführt werden konnten (obwohl sie immer noch .NET Standard-Bibliotheken verwenden konnten).

Ich schätze das Feedback aller, meine Hauptsorge war, dass der erste Thread davon begann mit: -

Heute früh wurden die meisten ASP.NET Core 2.0-Pakete so aktualisiert, dass sie auf netcoreapp2.0 statt auf netstandard1.* und net4* abzielen.

was mir Sorgen machte, dass wir nicht nur darüber sprachen, .NET Full Framework fallen zu lassen, sondern auch die Basisschicht von .NET Standard.

danke, dass du das für mich geklärt hast, ich weiß es zu schätzen 👍

Für eine Obduktion gibt es etwas, das ich ernsthaft klären möchte:

Als das Team die letzten Probleme vor Build bearbeitete, stellte sich heraus, dass die Vorschau von ASP.NET Core 2.0 APIs nutzte, die außerhalb von .NET Standard 2.0 lagen, wodurch verhindert wurde, dass es auf .NET Framework ausgeführt werden konnte.

Wenn Sie wie Kestrel auf netstandard1.3 und net46 abzielen (andere Pakete haben ähnliche Ziele). Wie kommen Sie dazu, „APIs zu verwenden, die außerhalb von .NET Standard 2.0 liegen“?

AFAIK, netstandard2.0 ist eine Obermenge von sowohl netstandard1.3 _and_ net46 , daher kann ich mir schwer vorstellen, wie Sie in eine Situation geraten könnten, in der Sie APIs verwenden, die Sie am Ausführen hindern auf .NET Framework. Wie würde dieses Projekt überhaupt kompilieren? OK, vielleicht verwenden Sie ein separates Paket mit einigen zusätzlichen APIs, aber um überhaupt auf ein solches Paket verweisen zu können, muss es alle Zielframeworks unterstützen.

Sicherlich muss es etwas über Bait-n-Switching und Referenzbaugruppen usw. geben. Ich komme nicht hierher, oder ist der Kommentar im Blogbeitrag nur eine Möglichkeit, so zu tun, als wäre dies nie eine Sache gewesen? 😕

Warum war es überhaupt notwendig, diese Änderung kurz vor der Vorschau zu beschleunigen? Ist .NET Framework nicht Teil der Testmatrix?

@adrianlmm Danke Kumpel.

Dies sollte Kommentare darüber beenden, ob es unterstützt wird oder nicht, die mehr Verwirrung stiften. Wie Sie sagten, lassen Sie uns das Ereignis abwarten

Und bitte lasst es den letzten Kommentar hier sein, damit jeder, der diesen Thread zum ersten Mal sieht, nicht diesen ganzen langen Thread lesen muss, sondern sich stattdessen den Link zu der Veranstaltung ansehen muss.

@hellang

Vielleicht weiß es @benaadams .
Ich bin mir ziemlich sicher, dass er einige Pull-Requests hatte (möglicherweise bereits zusammengeführt?), die Dinge enthielten, die außerhalb des Kerns nicht funktionieren.

@khellang Die PRs, die dieses Problem ausgelöst haben, und die Aussage im Blogbeitrag sind einfach inkonsistent.

Wenn die Fakten tatsächlich so wären, wie im Blogbeitrag beschrieben (Last-Minute-Realisierung, vorübergehende Änderung), warum wurde dann im Rahmen dieser Änderung eine Menge #if NET46 -Code entfernt?

Warum wurde im Rahmen dieser Änderung eine Menge #if NET46 -Code entfernt?

@willdean Ja, das ist ein guter Punkt. Wenn Sie nur die Ziel-Frameworks ändern, wären die impliziten Definitionen einfach weg, und auch der Code (aus den kompilierten Binärdateien) ¯\_(ツ)_/¯

Für diejenigen, die in der Zwischenzeit nach etwas Offiziellem suchen, scheint @migueldeicaza mit dem Register bestätigt zu haben, dass ASP.NET Core 2 auf .Net Standard 2 (und damit NetFx) der offizielle Plan ist: https://www.theregister.co .uk/2017/05/11/microsoft_backtracks_we_are_going_to_support_net_framework_with_aspnet_core_20/

Was ist mit den Kompromissen, die mit der Aufrechterhaltung der Kompatibilität mit .NET Framework verbunden sind, wird dies ASP.NET Core zurückhalten oder seine Leistung beeinträchtigen?

Die Antwort, sagt de Icaza, ist die Verwendung von bedingtem Code, um „innovativ zu sein und Leistung zu erzielen. Es gibt eine Reihe von Dingen, die Sie tun können, während Sie immer noch auf den gemeinsamen Nenner abzielen. Man kann immer wieder neue Dinge anzünden.“ Es ist ähnlich, wie auf einem PC Anwendungen die neuesten CPU- oder GPU-Innovationen unterstützen können, während sie noch auf alter Hardware laufen. „Wenn die CPU neue Fähigkeiten hat, nutzen wir sie, ansonsten greifen wir auf alten Code zurück.“

Um meinen früheren Kommentar zu verdeutlichen, da er verloren gegangen zu sein scheint, habe ich Angular 2 nur erwähnt, weil der Kommentar zuvor Angular 2 erwähnte, nicht weil ich dachte, es sei eine großartige Analogie.

Allerdings ist es für diese Diskussion relevant, dass das Angular-Team das, was es beim Erstellen von AngularJS gelernt hatte, auf die neue Technologie anwendete, die ihm in Form von ES2016 und TypeScript zur Verfügung stand, und mit der alten, langsamen, klobiger, CPU-intensiver Code, um etwas _Neues_ zu erstellen, das exponentiell besser für die Erstellung umfangreicher Browser- und mobiler Erfahrungen ist. Sie haben den Hit genommen und Angular ist besser dafür.

Das vollständige .NET-Framework ist nicht das Beste, um darauf Webanwendungen zu erstellen. Das wird es nie sein. Es passt einfach nicht in eine Cloud-native, leistungsstarke, kostensensitive Welt mit verteilten Diensten. Das ist die Welt, für die .NET Core entwickelt wurde, und sie ändert sich ständig. ASP.NET Core ist in TechEmpower Round 14 vom 10. auf den 15. Platz gefallen, weil in den letzten Monaten neue Dinge hinzugekommen sind. Nein, Benchmarks sind nicht alles, aber sie _sind_ eine Sache, und es ist wichtig, wettbewerbsfähig zu sein.

Also bitte alle, nutzt diesen Hinrichtungsaufschub mit Bedacht. Wenn .NET Core 2.0, NetStandard2 und die erhöhte Kompatibilität mit bestehenden .NET-Paketen (und hoffentlich die Veröffentlichung aktuellerer netstandard -Pakete) bedeutet, dass Sie von der Vollversion von .NET auf Core umsteigen können, dann tun Sie es. Aber wenn Ihre Millionen von Zeilen von Legacy-Code bedeuten, dass dies immer noch keine Option ist, dann sagt Ihnen vielleicht Gott, dass Sie einfach bei ASP.NET 4.7 bleiben sollen.

@tbprinz

Wenn dieser Thread Ihnen nicht beigebracht hat, dass das Problem nicht darin besteht, dass wir UTF8-Strings haben, sondern Menschen, die von diesen Technologien abhängig sind, um ihren Lebensunterhalt zu verdienen, ehrlich ...

Danke für deinen aufschlussreichen Beitrag. Besonders die obige Zeile ist IMHO sehr aufschlussreich.

@willdean es könnte die Erwartung bestehen, dass sich Dinge auf einer geeigneten netstandard2x -Plattform befinden, wenn Asp.Net Core darauf abzielt.

@FransBouma

sieht etwas ironisch aus. Ich akzeptiere das. Aber ich war ungeheuer ernst.

@stefanolson @alexwiese @yaakov-h Nebenbei wurde XAML Standard 1.0 gerade auf Build https://github.com/microsoft/xaml-standard angekündigt

@markrendle Ich liebe dich Mark, aber dir entgeht hier das Gesamtbild. Die TechEmpower-Benchmarks sind im Großen und Ganzen trivial, und ich sage das als jemand, der einen erheblichen Teil seiner täglichen Arbeit damit verbringt, den NETFX-Code zu optimieren. Das ASP.NET Core-Team könnte sich um sie kümmern, um ihren Fortschritt mit dem anderer konkurrierender Technologien zu vergleichen, und es könnte sich darauf auswirken, neue Leute für .NET Core zu gewinnen, weg von anderen Plattformen wie Node.JS, aber zu den dafür verantwortlichen Entwicklern Hunderte von Milliarden Dollar an kumuliertem Geschäftswert zu schaffen, der derzeit auf IIS und Windows läuft, ist nur ein nettes Feature, nicht der heilige Gral.

Außerdem ist .NET bereits Cloud-nativ, was auch immer das bedeutet - ich habe große verteilte Anwendungen darauf ausgeführt (100 Millionen Anfragen pro Tag) und ich brauchte dafür weder Docker noch Linux. Es gibt andere in diesem Thread, die in noch größerem Umfang gearbeitet haben, als ich vermute. Das bedeutet nicht, dass wir nicht wollen, was .NET Core in Bezug auf bessere Leistung (edit: und bessere Bereitstellungserfahrung) bietet, aber es bedeutet, dass nichts uns technisch daran hindert, diese Größenordnung heute zu erreichen.

Versuchen Sie, es den ASP.NET/NETFX-Entwicklern zu sagen, die Finanzanwendungen entwickeln, die Hunderte von Millionen Dollar pro Tag bewegen, Gesundheitsanwendungen, die Patienten behandeln, Dienste, die Energieerzeugung und -verbrauch verwalten, und Echtzeit-Sicherheitsüberwachung für Transportsysteme überall der Welt, ihren "Legacy"-Code wegzuwerfen und neu anzufangen. Diese Entwickler sind der Grund, warum das ASP.NET-Team überhaupt eingestellt wird – sie kaufen die MSDN-Lizenzen, die großen Azure-Unternehmensvereinbarungen, die riesigen Office-Abonnements und die großen SQL Server-Bereitstellungen, die die Erstellung, Entwicklung und Wartung finanzieren dieser Werkzeuge zu beginnen.

Was diese Leute in dem Thread sagen, ist: „In keiner Weise, Form oder Form könnte ich meinem Management eine Änderung dieser Größenordnung für so wenig Gewinn verkaufen.“ Eine 10-fache Verbesserung des Durchsatzes von Anfragen pro Sekunde ist kein guter Kompromiss im Vergleich zu der Unterbrechung der Geschäftstätigkeit, die eine so abrupte Umstellung der Plattform erfordern würde, insbesondere angesichts der Lücken in den beiden Technologien, die sie heute sind. @NickCraver hat dieses Problem für SO in diesem Thread gut beschrieben. Die Plattformmigration muss, um wirtschaftlich zu sein, parallel zum laufenden Betrieb des Unternehmens erfolgen. Diese Entwickler sind keine Ludditen oder Idioten; Sie sind durch die Realität der Unternehmen eingeschränkt, die ihr Gehalt zahlen, und Kunden, die ihre Software verwenden, werden es nicht tolerieren, dass sie sich Monate oder Jahre frei nehmen, um ihre Software ohne enorme Vorteile für das Unternehmen und die Kunden zu ändern.

Hier gibt es eindeutig eine Kluft zwischen zwei Lagern von Menschen: Leute, die eine Zukunft auf der grünen Wiese wollen, die nicht durch die Vergangenheit von .NET eingeschränkt wird, und Leute, die das gerne haben würden, aber erkennen, dass dies derzeit für sie wirtschaftlich nicht machbar ist . Die letztgenannte Gruppe hat das Argument bereits gewonnen, und das zu Recht, denn sie sind die Benutzer, die die größten Verbraucher der .NET-Plattform darstellen. Die Leute, die unabhängige Betreiber sind, die es sich leisten können, neue Technologien schnell zu übernehmen, werden im selben Boot wie wir stecken, aber das ist der Preis, den sie im Austausch für kostenlose Editionen von Visual Studio, Code, großartigen OSS-Tools von MSFT usw. zahlen Al.

Dass sich die Enterprise / NETFX-Benutzer im Namen besserer Benchmarks einer Art technischer Reinheit beugen, ist eine undurchführbare Forderung. Besser für MSFT, das Mutige zu tun und NETFX parallel zu NET Core besser zu machen , denn das fordern die Kunden in diesem Thread.

.NET ist ein großes Zelt, und ich bewundere die Anstrengungen, die Microsoft unternimmt, um es mit .NET Core und .NET Standard größer zu machen, und diese Bemühungen sollten von der Community gelobt und unterstützt werden. Aber abgesehen davon ist es bestenfalls taub, die über 15-jährige Einführung von NETFX (und seinen Benutzern) als eine Art unbequemes Erbe zu ignorieren, das aufgegeben und nach der Eile vergessen werden sollte. Es ist besser, mit diesen Entwicklern zusammenzuarbeiten, um einen sauberen, schrittweisen Migrationspfad anzubieten, wenn das Schicksal darin besteht, dass die beiden Plattformen schließlich voneinander abweichen. Vielleicht wäre es am besten gewesen, wenn ASP.NET Core / .NET Core als etwas ganz anderes ohne Beziehung zu .NET gebrandmarkt worden wäre, aber diese Glocke kann nicht ausgeläutet werden und es gibt jetzt kein Zurück mehr. Lassen Sie uns in der Zwischenzeit Microsoft unterstützen und sie auch zur Rechenschaft ziehen.

@markrendle

Das vollständige .NET-Framework ist nicht das Beste, um darauf Webanwendungen zu erstellen. Das wird es nie sein. Es passt einfach nicht in eine Cloud-native, leistungsstarke, kostensensitive Welt mit verteilten Diensten. Das ist die Welt, für die .NET Core entwickelt wurde, und sie ändert sich ständig. ASP.NET Core ist in TechEmpower Round 14 vom 10. auf den 15. Platz gefallen, weil in den letzten Monaten neue Dinge hinzugekommen sind. Nein, Benchmarks sind nicht alles, aber sie sind eine Sache, und es ist wichtig, wettbewerbsfähig zu sein.

Also bitte alle, nutzt diesen Hinrichtungsaufschub mit Bedacht. Wenn .NET Core 2.0, NetStandard2 und die erhöhte Kompatibilität mit bestehenden .NET-Paketen (und hoffentlich die Veröffentlichung aktuellerer Netstandard-Pakete) bedeutet, dass Sie von der Vollversion von .NET auf Core umsteigen können, dann tun Sie es. Aber wenn Ihre Millionen von Zeilen von Legacy-Code bedeuten, dass dies immer noch keine Option ist, dann sagt Ihnen vielleicht Gott, dass Sie einfach bei ASP.NET 4.7 bleiben sollen.

Bitte versuchen Sie, nicht unsensibel zu sein und andere anzuweisen, wo sie ihre zukünftigen Bemühungen einsetzen sollten, Sie haben keine Ahnung, wie viel Zeit, Mühe, Hingabe und Lebensunterhalt auf dem Spiel stehen, jeder kennt seine eigenen Anwendungsfälle besser als Sie und wo er sie einsetzen sollte ihre zukünftigen Bemühungen und werden ihre eigenen fundierten Entscheidungen auf der Grundlage ihrer eigenen individuellen Anwendungsfälle treffen, wenn die Roadmaps klarer werden.

Ein offizieller Sprecher des ASP.NET-Teams wird seine eigenen offiziellen Ankündigungen und Zusagen machen, sobald er bereit und bereit ist. Jeder kann selbst entscheiden, was er tun soll, nachdem wir ein klareres Bild davon haben, wie die zukünftige Richtung der von ihm gewählten Plattform aussieht wie.

Sie sind vergiftet, wenn Sie sich einen einzigen Benchmark ansehen und denken, dass dies eine Art Rechtfertigung dafür ist, Vertrauen zu zerstören, Unsicherheit zu schaffen, den größten Teil Ihrer bestehenden Benutzerbasis aufzugeben und 15 Jahre vernünftige Sprach- und Plattformentwicklung zu betreiben. Es kann länger dauern, es kann eine andere Architektur erforderlich sein, aber die Leistung kann dennoch erreicht werden, während die Kompatibilität aufrechterhalten wird. Maximale Leistung, während alles andere geopfert wird, ist nicht alles, die meisten der schnellsten Frameworks sind unbekannt und die drei besten Frameworks sind in C/C++ geschrieben, wenn Sie die schnellstmögliche Leistung wollen, bauen Sie Ihr Imperium auf C/C++ auf – .NET Core wird es tun nie den Spitzenplatz erreichen. Es wird immer noch empfohlen, Kestrel hinter einem Reverse-Proxy zu betreiben, der alle geringfügigen Mikroverbesserungen überschattet, also geht es in erster Linie darum, früher mit Rechten zu prahlen. Wir alle wollen schnellere Leistung, aber wir alle wollen Werte schaffen und Lösungen liefern – Plattformen sind ein Wegbereiter, wie die meisten Frameworks, sie sind ein Mittel zum Zweck, um die Schaffung multiplikativer Mehrwertlösungen zu erleichtern, deren Wert bei weitem überschattet wird Plattform selbst.

Der beste Weg nach vorne besteht darin, jeden Plan zu akzeptieren, den das ASP.NET-Team für uns auf Lager hat, und unseren eigenen Beitrag zu leisten, um die Plattform voranzubringen, und sich mit dem zu befassen, was hätte sein können, nützt niemandem etwas.

Ich habe diesbezüglich viele Bedenken, zumal meine Anwendung auf Active Directory angewiesen ist. Ich weiß nicht, ob es derzeit eine .NET Core-Lösung für den Active Directory-Zugriff gibt oder jemals geben wird.

@twilliamsgsnetx Active Directory kommt. Es gibt einige gute Beiträge in den ersten 100 Kommentaren weiter oben.

@hallatore Ja, ich habe gerade Scotts Beitrag gelesen. Gute Sachen... würde für Microsoft nicht viel Sinn machen, etwas zu verfolgen, das keine Lösung für ein Microsoft-Produkt bietet. Heh.

Danke! :+1:

@hallatore Wissen Sie, ob Active Directory-Unterstützung in der kürzlich veröffentlichten Vorschau verfügbar ist? Oder ist es noch für irgendwann im Sommer geplant? Ich habe ein Greenfield-Projekt, das eine AD-Integration erfordert, und ich würde gerne Core verwenden.

@adam3039 , Sie können AD derzeit mit Core 1.x verwenden, wenn Sie auf dem .NET Framework sitzen. Die System.DirectoryServices scheinen später zu kommen, vielleicht in der nächsten .NET Core 2.x-Vorschau?

@snickler Danke für die Klarstellung! Ich habe nur Azure AD-Authentifizierungsoptionen gesehen, als ich eine neue Core-Anwendung auf .NET Framework erstellt habe. Ich werde weiter recherchieren!

Der Punkt bei den Benchmarks ist nicht die rohe Geschwindigkeit, sondern die Fähigkeit, auf derselben Hardware eine viel bessere Leistung und Skalierbarkeit zu liefern. Dies bedeutet, dass mit viel weniger Hardware eine der aktuellen Leistung entsprechende Leistung bereitgestellt wird, was sich direkt auf die Bereitstellung von Geschäftswert bezieht. Das bedeutet, dass Sie Ihre Systeme mit einem Zehntel Ihres aktuellen Hardware-Setups oder Ihrer Cloud-Verpflichtung betreiben können. Da .NET Core moderne Muster und Praktiken unterstützt, können Entwickler darüber hinaus effektiver arbeiten, schneller iterieren und innovativ sein und mehr und bessere Lösungen für ihre Unternehmen bereitstellen.

Ich bin auch der festen Überzeugung, dass für die meisten Systeme, um die es hier geht, eine richtig geplante Migration zu einer soliden, robusten serviceorientierten oder Microservice-Architektur, ein Stück Monolith nach dem anderen, gefördert werden sollte. Es ist großartig, dass es dafür einen Pfad gibt, bei dem Sie einfach einige Dateien oder Codezeilen kopieren und in neue Projekte einfügen können. Früher musste man alles umschreiben, von COBOL auf 4GL oder was auch immer, weshalb es immer noch so viele COBOL gibt, die die Welt am Laufen halten.

Und wenn das Worst-Case-Szenario darin besteht, dass Sie wirklich auf vollfettem Windows ASP.NET und IIS festsitzen, ist das bei weitem nicht das Schlimmste, was passieren könnte. Sie werden immer noch all die coolen C#-Sachen bekommen, die kommen werden, und diese Dinge, die in .NET Core einfließen, werden Sie irgendwann erreichen, es dauert nur ein bisschen länger.

@mythz Ich bin mir ziemlich sicher, dass ich den Leuten vorgeschlagen habe, genau das zu tun, was Sie gesagt haben.

@markrendle

Der Punkt bei den Benchmarks ist nicht die rohe Geschwindigkeit, sondern die Fähigkeit, auf derselben Hardware eine viel bessere Leistung und Skalierbarkeit zu liefern. Dies bedeutet, dass mit viel weniger Hardware eine der aktuellen Leistung entsprechende Leistung bereitgestellt wird, was sich direkt auf die Bereitstellung von Geschäftswert bezieht. Das bedeutet, dass Sie Ihre Systeme mit einem Zehntel Ihres aktuellen Hardware-Setups oder Ihrer Cloud-Verpflichtung betreiben können. Da .NET Core moderne Muster und Praktiken unterstützt, können Entwickler darüber hinaus effektiver arbeiten, schneller iterieren und innovativ sein und mehr und bessere Lösungen für ihre Unternehmen bereitstellen.

Dies sind Gründe dafür, sich auf die Leistung zu konzentrieren, was .NET Core bereits tut und bereits eine hervorragende Leistung liefert. Ich bin mir nicht sicher, woher Sie die 10-mal bessere Auslastungszahl ziehen, da dies .NET Core 4,2-mal schneller machen würde als das schnellste C Framework verfügbar ist und die Erhöhung der Top-Line-Zahlen keinen großen Unterschied machen wird, da diese Zahlen an den Rand gedrängt werden, sobald sie dazu bestimmt sind, echte Workloads zu bedienen. Ich stimme zu, dass die Bereitstellung von Geschäftswert wichtig ist und schnellere Leistungszahlen für Unternehmen, die nicht auf .NET Core migrieren können, keine Rolle spielen, und .NET Core profitiert nicht von einem kleineren Ökosystem, Wissenspool, Unsicherheit, Instabilität, ärmer Kompatibilität usw.

Die wertvollsten Internet-Eigenschaften wurden mit dynamischen Sprachen erstellt, die nicht die schnellsten Frameworks verwenden, was wichtiger ist, ist ein reichhaltiges, lebendiges, produktives und stabiles Ökosystem. Für sie ist Skalierbarkeit wichtiger als reine Leistung, und selbst die langsamsten Frameworks können mit einer guten Caching-Strategie schnell gemacht werden, was ebenfalls wichtiger ist als reine Leistung.

Ich bin auch der festen Überzeugung, dass für die meisten Systeme, um die es hier geht, eine richtig geplante Migration zu einer soliden, robusten serviceorientierten oder Microservice-Architektur, ein Stück Monolith nach dem anderen, gefördert werden sollte.

Bisher war also vor allem die maximale Leistung das Wichtigste, und jetzt lautet die Empfehlung, funktionierende Systeme umzugestalten, um mehr Netzwerksprünge einzuführen? Microservice-Architekturen sind keine Feenstaub-Technologie, die alle Systeme in allen Anwendungsfällen auf magische Weise verbessern kann, @NickCraver deckt bereits ab, warum es für StackOverflow keinen Sinn macht, es macht keinen Sinn für Basecamp und viele andere prominente Branchenführer auch schlagen vor, zuerst monolith zu gehen oder dass Sie mehr Vorteile mit weniger Kompromissen erzielen können, indem Sie Ihr System modularisieren . Dies ist in Greenfield-Projekten sinnvoller, da das Refactoring und Umschreiben funktionierender Systeme in den meisten Fällen eine Todsünde ist, die eine schlechte Ressourcennutzung darstellt, die keinen Kundennutzen bietet.

@mythz Ich bin mir ziemlich sicher, dass ich den Leuten vorgeschlagen habe, genau das zu tun, was Sie gesagt haben.

Es ist nicht und du weißt es.

FYI .NET Standard 2.0 und .NET Core 2.0 wurden live auf https://channel9.msdn.com angesprochen – beginnend um 11:54:00 Uhr . Es gibt auch einen direkten Link zum Video .

Sieht so aus, als seien alle Bedenken offiziell ausgeräumt worden:

Scott Jäger:

Der Plan sieht vor, dass ASP.NET Core 2.0 in Vorschauversion 2 an .NET Framework arbeitet

Github ist nicht maßgeblich dafür, was .NET ist, in den Blogs (.NET-Blog oder ASP.NET-Blog) sendet das Team tatsächlich eine Nachricht darüber, was wir mit dem Tool tun, wohin wir das Tool verschieben werden und so weiter.

WinForms, WPF, das sind Windows-Features, .NET Core soll eine plattformübergreifende Variante von .NET sein, und deshalb werden wir keine Nur-Windows-Ismen in .NET Core verschieben ... Was ich Kunden gerne sagen möchte. NET Framework wird nirgendwo hingehen, wir werden .NET Framework für immer unterstützen, und Sie sollten sich daher nicht gezwungen fühlen, Ihren gesamten alten Code zu nehmen und ihn auf .NET Core zu verschieben. Die Gründe für den Wechsel zu .NET Core liegen darin, dass Sie plattformübergreifend oder vollständig nebeneinander arbeiten möchten

.NET Core kann sich schneller bewegen als .NET Framework, da es kein Teil von Windows ist und Side-by-Side nicht unterstützt. Das Ziel ist also nicht zu sagen, dass jeder seine App vollständig von .NET Framework auf .NET verschieben muss Kern, wenn Sie WinForms oder WPF oder WCF ausführen, sind dies großartige Workloads für die Ausführung auf .NET Framework, und wir werden diese Dinge für immer unterstützen. Denken Sie nicht, dass Sie sich bewegen müssen, Sie sollten sich bewegen, weil Sie plattformübergreifend oder das volle Side-by-Side wollen.

Sie haben dies gerade im obigen Channel 9-Stream beantwortet:

  • ASP.NET Core 2.0 kann sowohl netstandard2.0-Assemblys verwenden als auch auf jeder netstandard2.0-kompatiblen Plattform ausgeführt werden.
  • ASP.NET Core 2.0 kann auf dem .NET Framework ausgeführt werden.

Das klingt ziemlich eindeutig, trotz der obigen Aussagen anderer MS-Entwickler in diesem Thread.

Tolle Diskussionen alle.

Meine 2 Cent hier sind, dass ASP.NET Core die größte BIBLIOTHEK von Microsoft ist, die die Verwendung von .NET Core unter Entwicklern fördert.

Da sie viel Arbeit in die Erstellung von .NET Standard gesteckt haben, um die Kompatibilität und die Verwendung von Bibliotheken in verschiedenen .NET-Varianten zu unterstützen, sollten sie einfach auf NETSTANDARD2.0 im asp.net-Kern abzielen, damit wir es einfach überall verwenden können, wie cool ist das um es in der Xamarin-App oder WPF-App zu verwenden, um eingebettete Webserverszenarien zu unterstützen. Aus diesem Grund ist ASP.NET Core von Grund auf so entkoppelt (wie Hosting, Server usw.).

Das Bild, das sie suchen, ist, dass, da .NET Core überall ausgeführt werden kann, keine Notwendigkeit besteht, andere Varianten von .NET zu unterstützen, und einfach mit den neuen, sich schnell ändernden Dingen fortfahren, um die zukünftigen anspruchsvollen API-Anforderungen von ASP.NET Core zu unterstützen und ASP zu binden .NET Core mit .NET Core.

Ich weiß nicht genau, welche superfortgeschrittene API sie in .NET Core wollen, um ASP.NET Core weiter wachsen zu lassen, aber das ist wahrscheinlich eine andere Geschichte. Der Punkt ist, dass ASP.NET Core nur eine weitere BIBLIOTHEK ist und dies auch bleiben muss.

Das vollständige .NET Framework ist immer noch ausgereift und kampferprobt. Viele Unternehmenskunden verwenden es (einschließlich mir selbst) und möchten ASP.NET Core weiterhin auf .NET Framework verwenden.

Danke

FYI .NET Standard 2.0 und .NET Core 2.0 wurden live auf https://channel9.msdn.com angesprochen ... Sieht so aus, als ob alle Bedenken offiziell ausgeräumt wurden

Da ich weiß, dass die Politik innerhalb von MS im Allgemeinen brutal ist, denke ich, dass der eher zweifelhafte Revisionismus in dem Video ein Versuch ist, zu vermeiden, dass die früheren Mitwirkenden an diesem Thread öffentlich unter den Bus geworfen werden. Ich neige nie dazu, die Unehrlichkeit von Unternehmen zu begrüßen, aber vielleicht ist es in diesem Fall tatsächlich zum Wohle der Allgemeinheit.

Um ein früheres Mem auszuleihen: "Onward, Oceania!"

@markrendle

Und wenn das Worst-Case-Szenario darin besteht, dass Sie wirklich auf vollfettem Windows ASP.NET und IIS festsitzen, ist das bei weitem nicht das Schlimmste, was passieren könnte. Sie werden immer noch all die coolen C#-Sachen bekommen, die kommen werden, und diese Dinge, die in .NET Core einfließen, werden Sie irgendwann erreichen, es dauert nur ein bisschen länger.<

Das ist wirklich einer der Hauptpunkte dieses Threads. Die meisten von uns wären ziemlich zufrieden, wenn der asp.net-Kern auf dem .net-Framework laufen könnte, selbst wenn es ein halbes bis ein Jahr dauert, um aufzuholen. Aber der Eindruck, den ich bekommen habe, ist, dass das ASP-Team sich vollständig trennen und nie wieder in der Lage sein möchte, auf .net-Framework zu laufen. Es ist der Mangel an Klarheit über Zukunftspläne, der es für diejenigen von uns sehr schwierig macht, die gegenüber unseren Kunden für die Erstellung langfristiger Entwicklungs- und Managementpläne verantwortlich sind.

@mythz Ja, das war es.

Der beste Weg nach vorne besteht darin, den Plan zu akzeptieren, den das ASP.NET-Team für uns bereithält, und unseren eigenen Beitrag zu leisten, um die Plattform voranzubringen

@stefanolson Du hast mich falsch verstanden, ich war offensichtlich nicht klar genug. Wenn ASP.NET Core, das auf .NET Core ausgeführt wird, aus irgendeinem Grund nie den Punkt erreicht, an dem es Ihren Code ausführen kann (z. B. das C++/CLI-Ding) und Sie Ihren Code nicht umschreiben oder Ihre Architektur umgestalten können, dann bleiben Sie bei Classic ASP .NET MVC/WebAPI oder WebForms.

(Übrigens stelle ich fest, dass wir alle endlich von der WebForms-Kerfuffle weggekommen sind. Diese Jungs machen einfach weiter.)

@markrendle , darauf wurde offensichtlich nicht verwiesen

@markrendle WebForms zu MVC war ein ganz anderer Fischkessel. Es wurde lediglich die UI-Schicht geändert. Ich könnte immer noch denselben Backend-Code verwenden, um meine Dokumenterstellung usw. durchzuführen. Damit hatte ich also überhaupt keine Probleme. Was hier diskutiert wird, ist das vollständige Brechen der Kompatibilität mit meinem gesamten Code, nicht nur mit meinem UI-Code. Tatsächlich ist der UI-Code wahrscheinlich der portabelste Teil davon.

@stefanolson Vielleicht war der Übergang von WebForms zu MVC für Sie und Ihren Code einfach, aber für viele Leute war es so unüberwindbar, wie es jetzt das vollständige .NET zu Core ist. Und mein Punkt bleibt bestehen: Wenn Sie Ihren Code nicht zu ASP.NET Core migrieren können, tun Sie es nicht.

@stefanolson @markrendle gerade mitten in einem Übergang von WebForms -> MVC5, das war für MVC/MVC2 unüberwindbar, weniger für MVC5. Wir befinden uns möglicherweise in einer ähnlichen Situation, da ASP .NET Core 3 oder höher möglicherweise ein einfacherer Übergang ist.

Jeder, der das WebForms-Coolaid HARD getrunken hat, wurde jedoch während des Übergangs im Grunde genommen verarscht. Wir wurden gerettet, weil wir den ViewState-Sumpf nicht SCHWER hinuntergegangen sind. Ich denke, was für den Übergang von Framework -> Core wichtig sein wird, ist ein zuverlässiger, klarer und dokumentierter Plan für den Übergang.

Die diesbezüglich entstandene Ungewissheit ist das Problem, wenn es eine klare Unterscheidung gibt, dass für den .NET-Standard geschriebener Code in absehbarer Zeit portabel sein wird und keine vergeudete Anstrengung älteren Projekten hilft, den Umstellungsprozess zu beginnen, indem sie neuen Code in . NET Standard und das Verschieben von Bibliotheken dorthin.

Wenn sich dieses Ziel ändert, ist das nicht großartig, und es bedeutet, dass alles, was Sie tun, ein Nagel im Sarg Ihres Projekts sein könnte, oder Sie werden für lange Zeit an ~Python 2.x~ .NET Framework 4.x hängen bleiben.

Wie bei jedem Paradigmenwechsel gehen Menschen, die nicht das richtige Paradigma verwenden
es schwer haben.

Ich habe so viele Leute gewarnt, HttpContext.Current nicht zu verwenden ... noch ... es ist
wird heute noch geschrieben. Diese Apps werden seitdem schwer zu migrieren sein
Sie haben je nach Kontextwerten Tonnen von Code.

Wir hatten das gleiche Problem mit dem Coolaid von WebForms. Events, UpdatePanels,
etc ... Sie könnten immer noch ASMX verwenden, um AJAX mit jQuery zu machen. Es war aber schwieriger
Es war der "richtige" Weg, es zu tun. Das Wechseln von dieser Art von Apps war
einfacher, als MVC kam.

Das Gleiche passiert gerade. Das Muster ändert sich und was ist
die als "gute Praxis" gilt, hat sich ebenfalls weiterentwickelt. Der gesamte Code, der in der
Der alte Weg (gegen den Strich) muss vorher komplett neu gedacht werden
vorwärts bewegen.

Ich glaube nicht, dass es einen einfachen Übergangsplan gibt, außer zu wissen, was ist
"gegen den Strich" und wie man es repariert. Ich schließe keine nicht portierten APIs ein
da natürlich. Das ist ein ganz anderes Thema.

Am Freitag, den 12. Mai 2017 um 15:29 Uhr Aren Blondahl [email protected]
schrieb:

@stefanolson https://github.com/stefanolson @markrendle
https://github.com/markrendle in der Mitte eines WebForms -> MVC5
Übergangszeit war dies für MVC/MVC2 unüberwindbar, weniger für MVC5.
Möglicherweise befinden wir uns in einer ähnlichen Situation wie ASP .NET Core 3 oder höher
einen leichteren Übergang.

Jeder, der das WebForms-Coolaid HARD getrunken hat, wurde jedoch im Grunde genommen verarscht
während des Übergangs. Wir wurden gerettet, weil wir nicht SCHWER den Abstieg gemacht haben
ViewState-Sumpf. Ich denke, was für das Framework wichtig sein wird -> Core
Übergang hat einen zuverlässigen, klaren und dokumentierten Plan für den Übergang.

Die Unsicherheit, die hier entstanden ist, ist das Problem, wenn es sich um eine
klare Unterscheidung, dass für die absehbare Zukunft Code in .NET geschrieben wird
Standard wird übertragbar sein und keine vergebliche Mühe wird älteren Projekten helfen
Beginnen Sie den Übergangsprozess, indem Sie neuen Code in .NET Standard schreiben und
Bibliotheken dorthin verschieben.

Wenn sich dieses Ziel ändert, ist das nicht großartig, und es bedeutet alles
Sie könnten ein Nagel im Sarg Ihres Projekts sein, oder Sie bleiben bei Python hängen
2.x .NET Framework 4.x für eine lange Zeit.


Sie erhalten dies, weil Sie erwähnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/aspnet/Home/issues/2022#issuecomment-301165679 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AAMx6CoEdzs_Ys5a8W7Ri7lwfBqcIGUdks5r5LMigaJpZM4NReOn
.

Wow, was für eine Achterbahnfahrt dieser Thread war.

  1. Ich bin erleichtert, dass Microsoft der .net-Community auf github zuhört
  2. Ich bin erstaunt und erfreut, dass diese Diskussion zwar leidenschaftlich, aber fast vollständig professionell war
  3. Ich glaube, ich habe endlich verstanden, was .net-Standard bedeuten soll (!!)

Bearbeiten: Schimpfen über Dinge entfernt, die eigentlich kein Problem sind. Endlich den Beitrag zu Ende gelesen - Video hat alle Sorgen ausgeräumt.

@ poter134 Ehh. Hast du den Thread gelesen? Okay, ich habs verstanden; es ist lang, aber trotzdem ... Alles ist geklärt. Es war ein Missgeschick. Die nächste Vorschau (und die endgültige Version) von ASP.NET Core wird .NET Standard unterstützen, was wiederum .NET Framework bedeutet.

@PinpointTownes Vielleicht sollten Sie das Problem schließen und (oben) einen Hinweis hinzufügen, dass es eine Schlussfolgerung gegeben hat?

Ich würde sogar vorschlagen, Mitarbeiter zu sperren und einzuschränken. Ich denke es ist alles gesagt.

Entschuldigung - bin gerade zum Video gekommen! Das ist eine Erleichterung. Vielleicht wäre eine Zusammenfassung ganz oben das Beste für Leute wie mich, die zu 75 % lesen und verzweifelt sind.

Vielleicht auf das Build-Video verlinken, wo sie sich auf dieses Problem beziehen und https://channel9.msdn.com/Events/Build/2017/C9L18 klären

@PinpointTownes Vielleicht sollten Sie das Problem schließen und (oben) einen Hinweis hinzufügen, dass es eine Schlussfolgerung gegeben hat?

Fertig :+1:

@PinpointTownes , wir, die Community, sollten unsere Kommunikation auch auf unserer Seite reinigen, und das ist nicht einfach. Die Rate, mit der Probleme, Kommentare usw. auf GitHub gepostet werden, ist so hoch, dass es für ein kleineres Aspnet-Team schwierig ist, alles zu handhaben und den Überblick zu behalten. Diese zahlenmäßige Asymmetrie zwischen uns und den Leuten hinter dem .net-Core ist im Standup der asp.net-Community gut vertreten, was ein fast ausschließlich unidirektionaler Fluss von ihnen zu uns ist. Vielleicht könnten wir an eine zusätzliche Ebene zwischen einigen Community-Mitgliedern und dem .Net-Team denken, wo Vorschläge usw. an Skype-Meetings oder Standups weitergeleitet würden. Das wäre schwer umzusetzen, nehme ich an, aber vielleicht eine Richtung, die man in Betracht ziehen sollte, weil die Community ziemlich groß ist.

@ponant : Das ist das Äquivalent zu dem, was wir vorher hatten, nämlich Sie melden sich bei einer Person und hoffen, dass diese Person es weitergibt. Nein, die Community sollte in der Lage sein, ihre Probleme unverändert zu posten, und das Team kann dann diejenigen auswählen, mit denen es fortfahren möchte. Wenn das viel Arbeit ist, sollten sie (und nicht die Community) sicherstellen, dass sie damit umgehen können, z 't work is mixed with the set of bug reviews), fügen Sie eine Ebene für sich selbst hinzu, die die Fragen und die Probleme, an denen sie arbeiten müssen, aussortiert. IMHO ist das am transparentesten, da die Community sehen kann, welche Probleme aufgegriffen werden, und auch Feedback zu den Problemen anderer Leute geben kann. Wenn es an eine Black Box weitergegeben wird, haben wir keine Kontrolle darüber, es ist meiner Meinung nach ein großer Rückschritt.

Vergessen Sie nicht, dass Sie auch PRs, Beiträge und Fehlerbehebungen vornehmen können. Weiß jetzt eindeutig, wo die Repos zu finden sind 😉

@FransBouma , ich stimme Ihnen in Bezug auf Transparenz zu und ich gebe zu, dass das Hinzufügen einer Ebene im Allgemeinen eine schlechte Idee ist. Aber wir müssen das Team verstehen, wenn es mit Informationen von außen überhäuft wird, weil wir keine Informationen in GitHub ablegen und uns dann beschweren können, wenn sie andere Richtungen einschlagen. Wünschenswert wäre ein besseres Tool als GitHub, das in Verbindung damit funktioniert und moderner als die User Voice ist.

Warum habt ihr MS-Jungs nie die Lektionen gelernt? Ein Break-Everything-Update wird den Ruf und den Markt von .NET Core zerstören, genau wie das, was in WP 7.x bis 8 passiert.

Die Migration von ASP.NET 4 zu ASP.NET Core ist ein harter und langfristig schmerzhafter Fortschritt, bitte machen Sie es nicht noch schwieriger.

Sie kaufen die MSDN-Lizenzen, die großen Azure-Unternehmensverträge, die riesigen Office-Abonnements und die großen SQL Server-Bereitstellungen, die die Erstellung, Entwicklung und Wartung dieser Tools anfangs finanzieren

Das ist also wie die First-Class-Passagiere, die Verbesserungen in der Wirtschaft blockieren. OK.

@markrendle Microsoft erzielt derzeit Einnahmen von über zwei Milliarden Dollar pro Woche. Sie können es sich leisten, ihre Engineering-Projekte besser zu verwalten.

Für 400 Millionen US-Dollar pro Arbeitstag würde ich mehr erwarten, als dass das gesamte .NET-Team das legendär beschissene NuGet verwendet, um tägliche Builds von einem überlasteten Server in Belgien abzurufen, der an eine Firma namens Tech Tomato ausgelagert wurde. Für die Installation einer 78k-DLL sind derzeit 200 MB Metadaten erforderlich. https://github.com/NuGet/Home/issues/4448

Vielleicht ist es die Art und Weise, wie Microsoft GitHub verwendet, aber die Endbenutzerkommunikation ist schrecklich und die Kommunikation zwischen Teams wird zu einem Rennen, um Fehlerberichte vorzeitig zu schließen und Probleme aufzuteilen, bevor sie genügend Aufmerksamkeit der Community erhalten.

Aber wenn Microsoft die wichtigsten UserVoice-Anfragen ignoriert und alles, woran die Arbeit keinen Spaß zu machen scheint, als „Backlog“ gekennzeichnet wird, was bringt es dann, Dinge offen zu tun? Ja, du bist beschäftigt, das verstehen wir. Du warst vorher beschäftigt. Jetzt sind Sie beschäftigt und außerdem damit beschäftigt, sich mit öffentlichen Brigaden zu befassen.

Wie jedes schlecht geführte Webforum der 1990er Jahre reagieren gestresste Admins vorhersehbar. Kommentare verschwinden auf mysteriöse Weise aus alten Threads. Und die Geschäftsleitung verspricht, die Empörung der Community einzudämmen, hält sie aber nicht:

https://github.com/dotnet/cli/issues/5328
https://github.com/dotnet/corefx/issues/17522

Einige Microsoft-Mitarbeiter haben GitHub angenommen, viele entschieden, dass die erforderliche Zeit einfach nicht überschaubar ist, andere wurden zu GitHub-Süchtigen, die nichts Nützliches tun, außer Umfragen zu posten und ihre Twitter-Konten zu bewerben und „die Community“ zu fragen, wie man eine Factory-Methode am besten nennt oder bereitstellt begeisterte Kritiken von Logitech-Maus-Scrollrädern.

Also behebe ich die Dinge, indem ich interne Kontakte per E-Mail versende, so wie ich es seit 1992 tue. Und die erste Antwort erwähnt unweigerlich, dass dieses GitHub-Zeug völlig aus den Fugen geraten ist.

Edit für @PureKrome , der mir wegen der Mausräder nicht geglaubt hat.

Mouse Wheels is the new Mouse Balls

Übrigens, als Hanselman in diesem Thread auftauchte und die Entscheidung verteidigte, wusste ich, dass sie rückgängig gemacht werden würde. Wenn Sie wissen wollen, was Microsoft tut, lesen Sie einfach seinen Blog und warten Sie sechs Monate, bis die Technologie genau in die entgegengesetzte Richtung geht.

FYI: Einige Informationen zu 2.0.0-preview2 und .NET Framework; https://github.com/aspnet/Announcements/issues/243

@chadwackerman Ich glaube nicht, dass sie die gesamten zwei Milliarden Dollar für die Entwicklung von .NET ausgeben können. Ein Teil davon geht wahrscheinlich auf dumme, aber wesentliche Dinge wie Toilettenpapier, koffeinhaltige Getränke und Azure-Rechenzentren.

@oldrev

Warum habt ihr MS-Jungs nie die Lektionen gelernt? Ein Break-Everything-Update wird den Ruf und den Markt von .NET Core zerstören, genau wie das, was in WP 7.x bis 8 passiert.

Vielleicht haben sie es getan. Sonst hätte es noch mehr Breaking Changes gegeben.

Die Migration von ASP.NET 4 zu ASP.NET Core ist ein harter und langfristig schmerzhafter Fortschritt, bitte machen Sie es nicht noch schwieriger.

Ich stimme vollkommen zu, dass der Fortschritt hart und schmerzhaft ist und eine Weile dauern wird, und ich bin sicher, dass die MS-Leute sich dessen auch bewusst sind (ob sie den Fortschritt erleichtern werden, ist eine andere Geschichte).

Etwas zurücktretend hat mein Team die Möglichkeit geprüft, von ASP.net zu etwas anderem als ASP.NET Core zu wechseln, aber die Entscheidung ist ein Kinderspiel, da wir so viele Abhängigkeiten von MS-Technologie haben. Am Ende des Tages müssen wir die Realität akzeptieren.

MS versuchen, ihren eigenen Fehler zu wiederholen und die Unterstützung für das vollständige .NET im Microsoft.Data.Sqlite -Repository https://github.com/aspnet/Microsoft.Data.Sqlite/pull/370 einzustellen

Ohne Diskussionen mit der Community und ohne Ankündigungen.

@alexvaluyskiy Ich bin mir nicht sicher, wovon du redest. Sie ersetzen net451 durch netstandard2.0 , damit sie die .NET-Unterstützung nicht fallen lassen. netstandard2.0 wird von .NET 4.6.1 unterstützt.

@MartinJohns Jede Änderung von TFS ist eine große bahnbrechende Änderung, und ich denke, sie sollte zuerst angekündigt und diskutiert werden.
.NET 4.5.2 wird immer noch von MS unterstützt, und Microsoft.Data.Sqlite könnte darauf ausgeführt werden. Warum stellt MS die Unterstützung ein und zwingt Benutzer, auf net4.6.1 oder netstandard2.0 zu aktualisieren?

Weil es eine vernünftige Erwartung ist, dass Sie Ihre .NET-Version aktualisieren. Dies reduziert die Wartungskosten, da sie nur .NET Standard 2.0 und nicht mehrere Ziellaufzeiten unterstützen müssen. Es ist nicht so, dass sie .NET fallen lassen – sie unterstützen es immer noch, aber nur eine neuere Version.

Wollen Sie damit sagen, dass Microsoft alle Pakete bis hinunter zu .NET 1.0 unterstützen muss?

Das Zeug muss in irgendeiner Version zum Netzstandard konvergieren

@irwiss Dieser Kommentar ist nicht wirklich hilfreich. Nirgendwo deutete er an, dass Pakete bis hinunter zu .NET 1.0 unterstützt werden sollten. Aber er erwähnte "wird immer noch unterstützt", was richtig ist. .NET 4.5.2 ist seit dem 3. Mai 2017 immer noch eine offiziell unterstützte Version ohne geplantes Ende der Lebensdauer (https://support.microsoft.com/en-us/help/17455/lifecycle-faq-net-framework).

Die Unterstützung unterstützter .NET-Versionen ist keine weit hergeholte Forderung.

@MartinJohns Keine Partei ist furchtbar hilfreich, um ehrlich zu sein - der ursprüngliche Link zum SQLite-Problem basierte auf einer falschen Prämisse und versuchte, das Loch (in eine triviale Debatte zwischen 4.5.2 und 4.6.1) mit a umzugestalten Ein bisschen mehr Graben war keine gute Idee.

Ich weiß wirklich nicht, was passiert. Warum haben viele dotnet dies und das. Das ist wirklich verrückt. Wie können wir das nachverfolgen?

Keine ordnungsgemäße Dokumentation zur Migration von einem zum anderen.

Zuerst hatten wir die DLL-Hölle, und jetzt haben wir die Paket-Hölle ... je mehr sich die Dinge ändern .... ;)

Gibt es eine Möglichkeit, diesen Thread zu sperren? Dies scheint eher in ein Chat-Format als in ein GitHub-Problem zu gehören.

@MaximRouiller Wenn Sie nur die Hölle kennen, die ich seit gestern durchgemacht habe, nur um von netcoreapp1.1 auf netcoreapp2.0 zu aktualisieren.

Wenn Sie einen Link kennen, der es mir leichter machen kann, verweisen Sie mich bitte darauf.

Danke

@smithaitufe Das ist ein bisschen offtopic zu diesem Thema. Öffnen Sie stattdessen ein neues Problem.

@PinpointTownes @Eilon

Gibt es eine Möglichkeit, diesen Thread zu sperren? Jeder, der etwas kommentiert, sendet mehr als 100 E-Mails, um über neue Aktivitäten zu informieren, während er möglicherweise in einen neuen Thread gehört.

@MaximRouiller Ich habe das durchgemacht und es hat nicht geholfen.

Hast du das zum Beispiel in diesem Blog gelesen?

*
Insgesamt bietet dieses Framework-Update abgesehen von einigen bahnbrechenden Änderungen einen relativ reibungslosen Upgrade-Pfad.

Aber eine Sache, die extrem frustrierend ist, ist die Verbreitung von SDKs, Runtimes, Tools und all den verschiedenen Versionen, die sie enthalten. Vor allem, wenn diese Dinge am Ende nicht ganz aufeinander abgestimmt sind, weil sie sich alle in unterschiedlichen Vorschauphasen befinden.
*
Ich habe mich entschieden, ein neues Projekt zu erstellen, nur weil ich es nicht zum Laufen bringen konnte.

@Rutix Danke. Ich werde einen Ausweg finden

Aufgrund einiger Diskussionen hier und da dieses Problem für die kommende Vorschauversion 2 behoben ist, sperre ich dieses Problem. Bei weiteren Fragen zu ASP.NET Core-Änderungen oder -Problemen reichen Sie bitte ein neues Problem im entsprechenden Repository ein. Wenn Sie sich nicht sicher sind, wo Sie einreichen sollen, melden Sie bitte ein Problem im Home-Repo und markieren Sie mich (@Eilon) und ich helfe Ihnen, den richtigen Ort zu finden.

Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen