.NET Framework

.NET Framework
Microsoft .NET logo.svg
DotNet.svg
.NET Framework Component Stack
Entwickler (en) Microsoft
Erstveröffentlichung 13. Februar 2002; vor 20 Jahren
Endgültige Veröffentlichung
4.8.0 Build 4115 / 1. Mai 2021; Vor 15 Monaten[1]
Betriebssystem Windows 98 oder später, Windows NT 4.0 oder später
Plattform IA-32, x86-64, und ARM
Nachfolger .NETZ
Typ Software -Framework
Lizenz Gemischt; sehen § Lizenzierung
Webseite Punkt net.Microsoft.com Edit this on Wikidata

Das .NET Framework (ausgesprochen als "Punkt net") ist ein Eigentum Software -Framework entwickelt von Microsoft das läuft hauptsächlich auf Microsoft Windows. Es war die vorherrschende Umsetzung der Gemeinsame Sprachinfrastruktur (CLI) Bis durch die plattformübergreifende .NETZ Projekt. Es enthält eine große Klassenbibliothek genannt Framework -Klassenbibliothek (FCL) und bietet Sprachinteroperabilität (Jede Sprache kann Code verwenden, die in anderen Sprachen geschrieben wurden) über mehrere hinweg Programmiersprachen. Programme, die für .NET Framework geschrieben wurden, werden in a ausgeführt Software Umgebung (im Gegensatz zu a Hardware- Umgebung) benannte die Gemeinsame Sprachlaufzeit (CLR). Das CLR ist ein Anwendungsvirtuelle Maschine Das bietet Dienste wie Sicherheit, Speicherverwaltung, und Ausnahmebehandlung. Daher wird der mit .NET Framework geschriebene Computercode aufgerufen ""verwalteter Code". FCL und CLR zusammen bilden das .NET -Framework.

FCL stellt die Benutzeroberfläche, Datenzugriff, Datenbankkonnektivität, Kryptographie, Internetanwendung Entwicklung, numerisch Algorithmen, und Netzwerkkommunikation. Programmierer produzieren Software, indem sie ihre kombinieren Quellcode mit .NET Framework und anderen Bibliotheken. Das Framework soll von den meisten neuen Anwendungen verwendet werden, die für die Windows -Plattform erstellt wurden. Microsoft produziert auch eine integrierte Entwicklungsumgebung Für .NET -Software genannt Visual Studio.

.NET Framework begann als proprietäre Software, obwohl die Firma arbeitete standardisieren Der Software -Stapel fast sofort, noch vor der ersten Veröffentlichung. Trotz der Standardisierungsbemühungen Entwickler, hauptsächlich diejenigen in der Kostenlose und Open-Source-Software Communities drückte ihr Unbehagen mit den ausgewählten Begriffen und den Aussichten für eine kostenlose und offene Umsetzung aus, insbesondere in Bezug auf Software -Patente. Seitdem hat Microsoft die .NET-Entwicklung geändert, um ein zeitgemäßes Modell eines von Community entwickelten Softwareprojekts genauer zu verfolgen, einschließlich der Ausgabe eines Updates für sein Patent, das verspricht, die Bedenken auszuräumen.[2]

Im April 2019 veröffentlichte Microsoft .NET Framework 4.8, die letzte Version des Frameworks als proprietäres Angebot. Seitdem wurden nur monatliche Sicherheits- und Zuverlässigkeitsfehler in dieser Version veröffentlicht. Es sind keine weiteren Änderungen an dieser Version geplant.[3]

Geschichte

Microsoft begann Ende der neunziger Jahre mit der Entwicklung von .NET -Framework, ursprünglich im Rahmen des Namens der nächsten Generation Windows Services (NGWS) .NET -Strategie. Bis Anfang 2000 wurden die ersten Beta -Versionen von .NET 1.0 veröffentlicht.

Im August 2000, Microsoft, und Intel arbeitete, um zu standardisieren Gemeinsame Sprachinfrastruktur (Cli) und C#. Bis Dezember 2001 wurden beide ratifiziert ECMA International (ECMA) Standards.[4][5] Internationale Standardisierungsorganisation (ISO) im April 2003. Die aktuelle Version der ISO -Standards sind ISO/IEC 23271: 2012 und ISO/IEC 23270: 2006.[6][7]

Während Microsoft und ihre Partner Patente für CLI und C#veranstalten, müssen ECMA und ISO alle für die Implementierung unerlässlichen Patente zur Verfügung gestellt werden. "angemessene und nicht diskriminierende Begriffe"Die Firmen stimmten zu, diese Bedingungen zu erfüllen und die Patente zur Verfügung zu stellen. Windows forms, Ado.net, und ASP.NET. Patente, die Microsoft in diesen Bereichen besitzt, haben möglicherweise nicht-Microsoft-Implementierungen des vollständigen Frameworks abgeschreckt.[8]

Am 3. Oktober 2007 gab Microsoft bekannt, dass die Quellcode Für .NET Framework 3.5 -Bibliotheken sollte unter dem verfügbar sein Microsoft Referenzlizenz (MS-RSL[a]).[9] Das Quellcode -Repository wurde am 16. Januar 2008 online verfügbar und umfasste BCL, ASP.NET, ADO.NET, Windows Forms, WPF und XML. Scott Guthrie von Microsoft versprach, dass Linq, WCF und WF -Bibliotheken hinzugefügt wurden.[10]

Das .NET Compact Framework und .NET Micro Framework Varianten des .NET -Frameworks bieten Unterstützung für andere Microsoft -Plattformen wie z. Windows Mobil, Windows CE und andere ressourcenbezogene eingebettete Geräte. Silberlicht Unterstützung für Unterstützung für Internetbrowser über Plug-Ins.

Microsoft .net Framework v4.5 Logo

Im November 2014 erstellte Microsoft auch ein Update für seine Patentzuschüsse, das den Umfang über seine vorherigen Zusagen hinaus erweitert. Frühere Projekte wie Mono existierten in einem legalen graue Zone Da die früheren Zuschüsse von Microsoft nur für die Technologie in "abgedeckten Spezifikationen" angewendet wurden, einschließlich ausschließlich der 4. Ausgabe von jeweils ECMA-334 und ECMA-335. Das neue Patentversprechen legt jedoch keine Decke für die Spezifikationsversion und erstreckt sich sogar auf alle auf MSDN dokumentierten .NET -Laufzeit -Technologien, die von der ECMA -Gruppe nicht offiziell angegeben wurden, wenn ein Projekt sie implementiert. Auf diese Weise können Mono und andere Projekte die Parität der Funktionen mit modernen .NET -Funktionen aufrechterhalten, die seit der Veröffentlichung der 4. Ausgabe eingeführt wurden, ohne dass das Risiko von Patentstreitigkeiten über die Implementierung dieser Funktionen ausgesetzt ist. Der neue Zuschuss behält die Beschränkung bei, dass jede Implementierung die Mindesteinhaltung der obligatorischen Teile der CLI -Spezifikation beibehalten muss.[11]

Am 31. März 2016 gab Microsoft bei bekannt Microsoft Build dass sie vollständig werden Relions Mono unter An MIT -Lizenz Selbst in Szenarien, in denen früher eine kommerzielle Lizenz benötigt wurde.[12] Microsoft ergänzte auch sein früheres Patentversprechen für Mono und erklärte, dass sie keine "anwendbaren Patente" gegen Parteien geltend machen, die "verwenden, verkaufen, zum Verkauf angeboten, importiert oder verteilt".[13][14] Es wurde bekannt gegeben, dass das Mono -Projekt zur .Net Foundation beigetragen wurde. Diese Entwicklungen folgten dem Erwerb von Xamarin, das im Februar 2016 begann und am 18. März 2016 fertiggestellt wurde.[15]

Die Pressemitteilung von Microsoft zeigt, dass das plattformübergreifende Engagement nun einen vollständig offenen, modernen serverseitigen .NET-Stack ermöglicht. Microsoft hat am 4. Dezember 2018 den Quellcode für WPF, Windows Forms und Winui veröffentlicht.[16]

Die Architektur

Visueller Überblick über die gemeinsame Sprachinfrastruktur (CLI)

Gemeinsame Sprachinfrastruktur

Common Language Infrastructure (CLI) bietet eine sprachneutrale Plattform für die Anwendungsentwicklung und -ausführung. Durch die Implementierung der Kernaspekte des .NET -Frameworks im Rahmen des CLI werden diese Funktionen nicht an eine Sprache gebunden, sondern in den vielen Sprachen verfügbar sein, die vom Framework unterstützt werden.

Gemeinsame Sprachlaufzeit

.NET Framework enthält die gemeinsame Sprachlaufzeit (CLR). Es dient als Ausführungsmaschine von .NET Framework und bietet viele Dienste wie z. Speicherverwaltung, Geben Sie Sicherheit ein, Ausnahmebehandlung, Müllsammlung, Sicherheit und Thread Management. Alle für .NET Framework geschriebenen Programme werden von der CLR ausgeführt.

Programme, die für .NET Framework geschrieben wurden Gemeinsamer Zwischensprachencode (CIL), anstatt direkt zusammengestellt zu werden Maschinensprache. Während der Ausführung eine architekturspezifische Just-in-Time-Compiler (JIT) dreht die CIL -Code in den Maschinencode.

Versammlungen

Kompilierter CIL -Code wird in gespeichert CLI -Baugruppen. Wie durch die Spezifikation vorgeschrieben, werden Baugruppen in gespeichert Tragbare ausführbare Datei (PE) Dateiformat, gemeinsam auf Windows -Plattform für alle Dynamische Link Bibliothek (Dll) und ausführbar Exe Dateien. Jede Baugruppe besteht aus einer oder mehreren Dateien Metadaten für die Baugruppe. Der vollständige Name einer Montage (nicht zu verwechseln mit dem Dateinamen auf der Festplatte) enthält ihren einfachen Textnamen, die Versionsnummer, die Kultur und ihren einfachen Textnamen, und ihre Kultur und ihren einfachen Textnamen, und den Namen Öffentlicher Schlüssel Zeichen. Baugruppen gelten als gleichwertig, wenn sie den gleichen vollständigen Namen teilen.

Ein privater Schlüssel kann auch vom Schöpfer der Baugruppe für verwendet werden Starke Namen. Das öffentliche Schlüssel -Token identifiziert, mit welchem ​​privaten Schlüssel eine Versammlung unterschrieben ist. Nur der Schöpfer des Schlüsselpaars (normalerweise die Person, die die Baugruppe signiert) kann Ansammlungen unterzeichnen, die den gleichen starken Namen wie eine frühere Versionsversammlung haben, da der Schöpfer den privaten Schlüssel besitzt. Eine starke Benennung ist erforderlich, um Baugruppen zu Addieren Globaler Montage -Cache.

Ausgehend von Visual Studio 2015 ermöglicht die native Kompilierungstechnologie von .NET die Zusammenstellung von .NET Code von Universelle Windows -Plattform -Apps Direkt zum Maschinencode anstelle von CIL -Code, aber die App muss entweder in C# oder visual basic.net geschrieben werden.[17]

Klassenbibliothek

.NET Framework beinhaltet eine Implementierung des CLI -Fundaments Standardbibliotheken. Die .NET Framework Class Library (FCL) ist in einer Hierarchie von organisiert Namespaces. Der größte Teil der Einbau Anwendungsprogrammierschnittstellen (APIs) sind Teil von beiden System.* oder Microsoft.* Namespaces. Diese Klassenbibliotheken implementieren viele gängige Funktionen, wie das Lesen und Schreiben von Dateien, grafische Rendering, Datenbankinteraktion und XML -Dokumentmanipulation. Die Klassenbibliotheken sind für alle verfügbar CLI -konforme Sprachen. Die FCL implementiert die CLI Basisklassenbibliothek (BCL) und andere Klassenbibliotheken - einige werden von CLI angegeben und andere sind Microsoft -spezifisch.

BCL enthält eine kleine Untergruppe der gesamten Klassenbibliothek und ist der Kernsatz von Klassen, die als Basis dienen API von clr.[18] Für .NET Framework Die meisten Klassen, die als Teil von BCL angesehen wurden, wohnen mscorlib.dll, System.dll und System.core.dll. BCL -Klassen sind sowohl in .NET Framework als auch in seinen alternativen Implementierungen erhältlich .NET Compact Framework, Microsoft Silverlight, .NET CORE und Mono.

FCL bezieht sich auf die gesamte Klassenbibliothek, die mit .NET Framework geliefert wird. Es enthält einen erweiterten Satz von Bibliotheken, einschließlich BCL. Windows forms, ASP.NET, und Windows Presentation Foundation (WPF), aber auch Erweiterungen der Basisklassenbibliotheken Ado.net, Sprache integrierte Abfrage (Linq), Windows Communication Foundation (WCF) und Workflow Foundation (WF). FCL ist im Umfang viel größer als Standardbibliotheken für Sprachen wie C ++, und vergleichbar im Bereich zu Standardbibliotheken von Java.

Mit der Einführung alternativer Implementierungen (z. B. Silverlight) führte Microsoft das Konzept der tragbaren Klassenbibliotheken (PCL) ein, die es einer konsumierenden Bibliothek auf mehr als einer Plattform ermöglichen. Mit der weiteren Proliferation von .NET -Plattformen konnte der PCL -Ansatz nicht skaliert werden (PCLs sind definierte Schnitte der API -Oberfläche zwischen zwei oder mehr Plattformen).[19] Als nächster evolutionärer Schritt von PCL wurde die .NET -Standardbibliothek rückwirkend basierend auf dem erstellt System.Runtime.dll Basierte APIs in UWP und Silverlight. Neue .NET-Plattformen werden aufgefordert, eine Version der Standardbibliothek zu implementieren, die es ihnen ermöglicht, vorhandene Bibliotheken von Drittanbietern wiederzuverwenden, um ohne neue Versionen davon auszuführen. Die .NET -Standardbibliothek ermöglicht eine unabhängige Entwicklung der Bibliotheks- und App -Modellebenen innerhalb der .NET -Architektur.[20]

NuGet ist der Paketmanager für alle .NET -Plattformen. Es wird verwendet, um Bibliotheken von Drittanbietern in ein .NET-Projekt mit einem globalen Bibliotheks-Feed auf nuget.org abzuholen.[21] Private Feeds können separat gehalten werden, z. B. durch einen Build -Server oder ein Dateisystemverzeichnis.

C ++/cli

Microsoft eingeführt C ++/cli in Visual Studio 2005, eine Sprache und ein Kompilierungsmittel ist Visuell c ++ Programme, die innerhalb des .NET -Frameworks ausgeführt werden sollen. Einige Teile des C ++ - Programms werden immer noch innerhalb eines nicht verwalteten Programms ausgeführt Visuell c ++ Laufzeit, während speziell modifizierte Teile in übersetzt werden in CIL -Code und mit den .NET -Framework laufen CLR.

Die mit dem C ++/CLI-Compiler zusammengestellten Baugruppen werden als Mixed-Mode-Baugruppen bezeichnet, da sie nativen und verwalteten Code in derselben DLL enthalten.[22] Solche Baugruppen sind seit .NET komplexer, um den Ingenieur umzukehren Dekompiler wie zum Beispiel .NET -Reflektor Enthüllen Sie nur den verwalteten Code.

Designprinzip

Interoperabilität

Da Computersysteme üblicherweise eine Interaktion zwischen neueren und älteren Anwendungen erfordern, bietet .NET Framework Mittel zum Zugriff auf Funktionen, die in neueren und älteren Programmen implementiert sind, die externe .NET -Umgebung ausführen. Zugriff auf Komponentenobjektmodell (Com) Komponenten werden in angegeben System. Laufzeit. Interopices und System. Unternehmensdienste Namespaces des Frameworks. Der Zugriff auf andere Funktionen erfolgt über via Plattform -Aufrufdienste (P/Invoke). Der Zugriff auf .NET -Funktionen aus nativen Anwendungen erfolgt über die Reverse P/Invoke -Funktion.

Sprachunabhängigkeit

.NET Framework führt a ein Gemeinsames Typsystem (CTS), das alle möglich definiert Datentypen und Programmierung Konstrukte, die von CLR unterstützt werden und wie sie mit CLI -Spezifikationen entsprechen oder nicht. Aufgrund dieser Funktion unterstützt .NET Framework den Austausch von Typen und Objektinstanzen zwischen Bibliotheken und Anwendungen, die verwendet werden jede konforme .net -Sprache.

Geben Sie Sicherheit ein

CTS und der CLR, das in .NET Framework verwendet wird Geben Sie Sicherheit ein. Dies verhindert schlecht definierte Abgüsse, falsche Methodenaufrufe und Probleme mit der Speichergröße beim Zugriff auf ein Objekt. Dies macht auch die meisten CLI -Sprachen statisch typisiert (mit oder ohne Geben Sie Inferenz ein). Beginnend mit .NET Framework 4.0, die Dynamische Sprachlaufzeit erweiterte die CLR, sodass dynamisch typisierte Sprachen auf der CLI implementiert werden können.

Portabilität

Während Microsoft das volle Framework auf keinem System außer Microsoft Windows implementiert hat, hat es das Framework so konstruiert, dass es plattformübergreifend ist.[23] Implementierungen sind für andere Betriebssysteme verfügbar (siehe Silberlicht und § Alternative Implementierungen). Microsoft hat die Spezifikationen für CLI eingereicht (einschließlich der Kernklassenbibliotheken, CTS und CIL).[24][25][26] C#,[27] und c ++/cli[28] zu beiden ECMA International (ECMA) und Internationale Standardisierungsorganisation (ISO), die sie als offizielle Standards zur Verfügung stellen. Dies ermöglicht Dritten, kompatible Implementierungen des Frameworks und seiner Sprachen auf anderen Plattformen zu erstellen.

Sicherheit

.NET Framework hat einen eigenen Sicherheitsmechanismus mit zwei allgemeinen Funktionen: Code -Zugriffssicherheit (CAS) und Validierung und Überprüfung. CAS basiert auf Beweisen, die mit einer bestimmten Baugruppe verbunden sind. In der Regel sind die Beweise die Quelle der Baugruppe (unabhängig davon, ob sie auf dem lokalen Computer installiert oder aus dem Internet heruntergeladen wurde). CAS verwendet Beweise, um die dem Code erteilten Berechtigungen zu bestimmen. Andere Codes können verlangen, dass der Anrufcode eine bestimmte Genehmigung erteilt wird. Die Nachfrage führt dazu, dass CLR einen Anrufstapel Walk durchführt: Jede Montage jeder Methode im Anrufstapel wird auf die erforderliche Genehmigung überprüft. Wenn einer Versammlung der Erlaubnis nicht erteilt wird, wird eine Sicherheitsausnahme ausgelöst.

Gelang es Cil Bytecode ist einfacher zu Rückwärtsgut als native Code, es sei denn verschleiert.[29] .NETZ Dekompiler Programme ermöglichen es Entwicklern, die keine umgekehrten Fähigkeiten zu entwickeln, den Quellcode hinter unobfuszierten .NET-Assemblys anzusehen. Im Gegensatz dazu sind Apps, die mit nativem Maschinencode zusammengestellt wurden Betrachtung.[30] Dies schafft Bedenken in der Geschäftswelt über den möglichen Verlust von Geschäftsgeheimnisse und die Umgehung von Lizenzkontrollmechanismen. Um dies zu mildern, hat Microsoft einbezogen Dotfuscator Community Edition mit Visual Studio .net Seit 2002.[b] Verschleierungsinstrumente von Drittanbietern sind auch bei Anbietern wie z. B. erhältlich VMware, V.i. Labors, Turbo, und Rote Gate -Software. Verschlüsselungstools auf Methodenebene für .NET-Code sind bei Anbietern wie z. B. verfügbar SafeNet.

Speicherverwaltung

CLR befreit den Entwickler von der Belastung, das Gedächtnis zu verwalten (zuzuweisen und zu befreien, wenn er fertig ist); Es kümmert sich um die Speicherverwaltung selbst, indem er erkennt, wenn Speicher sicher befreit werden kann. Instanziationen von .NET -Typen (Objekten) werden aus dem verwalteten Heap zugewiesen. Ein von CLR verwalteter Speicherpool. Solange ein Hinweis auf ein Objekt besteht, das entweder direkt oder über a sein kann Graph Von Objekten wird das Objekt als verwendet angesehen. Wenn kein Verweis auf ein Objekt vorhanden ist und es nicht erreicht oder verwendet werden kann, wird es Müll, der für die Sammlung berechtigt ist.

.NET Framework beinhaltet a Müllsammler (GC), der regelmäßig läuft, separat Faden Aus dem Thread der Anwendung wird alle unbrauchbaren Objekte aufgezählt und den ihnen zugewiesenen Speicher zurückgewiesen. Es ist ein nicht deterministisches, kompaktierendes, Mark-and-Sweep Müllsammler. GC wird nur ausgeführt, wenn eine festgelegte Menge Speicher verwendet wurde oder der Speicher auf dem System ausreichend Druck gibt. Da es nicht garantiert ist, wenn die Bedingungen für die Rückforderung des Speichers erreicht sind, sind GC -Läufe nicht deterministisch. Jede .NET -Anwendung verfügt über eine Reihe von Wurzeln, die Zeiger auf Objekte auf dem verwalteten Haufen sind (verwaltete Objekte). Dazu gehören Referenzen auf statische Objekte, Objekte, die derzeit als lokale Variablen oder Methodenparameter definiert sind, und Objekte, auf die von CPU -Registern Bezug genommen werden.[31] Wenn GC ausgeführt wird, pausiert es die Anwendung und dann für jedes in der Wurzel genannte Objekt rekursiv Zählt alle Objekte, die aus den Wurzelobjekten erreichbar sind, auf und markiert sie als erreichbar. Es verwendet CLI -Metadaten und Betrachtung Um die von einem Objekt eingekapsierten Objekte zu entdecken und dann rekursiv zu gehen. Anschließend wird alle Objekte auf dem Haufen (die anfänglich zusammenhängend zugeteilt) unter Verwendung der Reflexion aufgezählt. Alle nicht als erreichbaren Objekte sind Müll.[31] Dies ist das Kennzeichen Phase.[32] Da das von Müll gehaltene Gedächtnis keine Konsequenz hat, gilt es als freier Raum. Dies lässt jedoch einen freien Raum zwischen Objekten, die anfangs angrenzend waren. Die Objekte sind dann verdichtet zusammen, um den verwalteten Haufen wieder frei zu machen.[31][32] Jeder Verweis auf ein Objekt, das durch Verschieben des Objekts ungültig ist, wird von GC aktualisiert, um den neuen Standort widerzuspiegeln.[32] Die Anwendung wird nach dem Ende der Müllsammlung wieder aufgenommen. Die neueste Version von .NET Framework verwendet die gleichzeitige Müllsammlung zusammen mit dem Benutzercode, wodurch Pausen unbemerkt werden, da dies im Hintergrund erfolgt.[33]

Der von .NET Framework verwendete Müllsammler ist auch Generation.[34] Objekte werden a zugewiesen a Generation. Neu erstellte Objekte werden markiert Generation 0. Objekte, die eine Müllsammlung überleben, werden markiert Generation 1. Generation 1 -Objekte, die eine andere Sammlung überleben, sind Generation 2. Das Framework verwendet bis zu Generation 2 Objekte.[34] Objekte mit höherer Generation sind müll seltener als Objekte der niedrigeren Generation. Dies erhöht die Effizienz der Müllsammlung, da ältere Objekte tendenziell längere Lebensdauer haben als neuere Objekte.[34] Durch das Ignorieren älterer Objekte in den meisten Sammelläufen werden insgesamt weniger Überprüfungen und Verdichtungsvorgänge benötigt.[34]

Leistung

Wenn eine Anwendung zum ersten Mal gestartet wird, erstellt das .NET Framework das CIL -Code in ausführbaren Code mit seinem Just-in-Time-Compilerund schneidet das ausführbare Programm in den .NET -nativen Bildcache aus.[35][36] Aufgrund von Caching startet die Anwendung schneller für nachfolgende Starts, obwohl der erste Start normalerweise langsamer ist. Um den ersten Start zu beschleunigen, können Entwickler die verwenden Native Bildgenerator Nützlichkeit zu manuell Vorzeitkompilierung und zwischen jeder .NET -Anwendung.[36]

Der Müllsammler, der in die Umwelt integriert ist, kann unerwartete Ausführungsverzögerungen einführen, über die der Entwickler nur wenig direkt kontrolliert. "In großen Anwendungen kann die Anzahl der Objekte, mit denen der Müllsammler arbeiten muss, sehr groß werden, was bedeutet, dass es sehr lange dauern kann, alle zu besuchen und neu zu ordnen."[37]

.NET Framework bietet Unterstützung für Anrufe Streaming -SIMD -Erweiterungen (SSE) über verwalteter Code Ab April 2014 im Visual Studio 2013 Update 2. jedoch, jedoch, Mono hat Unterstützung für Simd Erweiterungen ab Version 2.2 innerhalb des Mono.Simd -Namespace im Jahr 2009.[38] Monos Hauptentwickler Miguel de Icaza hat die Hoffnung geäußert, dass diese SIMD -Unterstützung vom ECMA -Standard von CLR übernommen wird.[39] Streaming -SIMD -Erweiterungen wurden in verfügbar x86 CPUs seit der Einführung der Pentium III. Einige andere Architekturen wie ARM und MIPS haben auch SIMD -Erweiterungen. Wenn der CPU keine Unterstützung für diese Erweiterungen bietet, werden die Anweisungen in der Software simuliert.[40][41]

Alternative Implementierungen

.NET Framework war die vorherrschende Implementierung von .NET -Technologien bis zur Veröffentlichung von .NETZ. Andere Implementierungen für Teile des Frameworks existieren. Obwohl die Laufzeit-Engine durch eine ECMA-ISO-Spezifikation beschrieben wird, können andere Implementierungen durch Patent Ausgaben; Die ISO -Standards können den Haftungsausschluss enthalten: "Aufmerksamkeit wird auf die Möglichkeit gelenkt, dass einige der Elemente dieses Dokuments Gegenstand von Patentrechten sein können. ISO dürfen nicht für die Identifizierung eines oder aller dieser Patentrechte verantwortlich gemacht werden."[42] Es ist schwieriger, Alternativen zu FCL zu entwickeln, was nicht von einem offenen Standard beschrieben wird und möglicherweise Urheberrechtsbeschränkungen unterliegt. Teile von FCL haben auch Windows-spezifische Funktionen und Verhaltensweisen, sodass die Implementierung auf Nicht-Windows-Plattformen problematisch sein kann.

Einige alternative Implementierungen von Teilen des Frameworks sind hier aufgeführt.

  • .NET Micro Framework ist eine .NET-Plattform für extrem ressourcenbezogene Geräte. Es enthält eine kleine Version von CLR und unterstützt die Entwicklung in C# (Obwohl einige Entwickler in der Lage waren, zu verwenden Vb.net,[43] wenn auch mit einer Menge an Hacking und mit begrenzten Funktionen) und Debugging (in einem Emulator oder auf Hardware), beide verwenden beide Microsoft Visual Studio. Es verfügt außerdem über eine Teilmenge der .NET -Framework -Klassenbibliothek (ca. 70 Klassen mit ungefähr 420 Methoden), a GUI Framework basierend auf WPF und zusätzliche Bibliotheken, die für eingebettete Anwendungen spezifisch sind.
  • Mono ist eine Implementierung von CLI und FCL und bietet zusätzliche Funktionen. Es ist lizenziert als gratis Software unter dem MIT -Lizenz. Es beinhaltet die Unterstützung von ASP.NET-, ADO.NET- und Windows Forms -Bibliotheken für eine Vielzahl von Architekturen und Betriebssystemen. Es enthält auch C #- und VB.NET -Compiler.
  • Tragbar.net (Teil von Dotgnu) Bietet eine Implementierung von CLI, Teilen von FCL und einem C# Compiler. Es unterstützt eine Vielzahl von CPUs und Betriebssystemen. Das Projekt wurde mit der letzten stabilen Veröffentlichung im Jahr 2009 eingestellt.
  • Microsoft Gemeinsame Sprachinfrastruktur gemeinsamer Quelle ist ein Nicht frei Implementierung von CLR. Die letzte Version wird jedoch nur auf Windows XP SP2 ausgeführt und seit 2006 nicht aktualisiert. Daher enthält sie nicht alle Funktionen von Version 2.0 von .NET Framework.
  • Crossnet[44] ist eine Implementierung von CLI und Teile von FCL. Es ist kostenlose Software mit einer Open Source MIT -Lizenz.

Lizenzierung

Microsoft Managed Code Frameworks und ihre Komponenten sind wie folgt lizenziert:

Komponente Lizenz
.NET Framework (Umteilbares Paket) Proprietäre Software[45]
Bezug Quellcode von .NET Framework 4.5 und früher Microsoft -Referenzlizenz (MS-RSL[a])[9][46]
Referenzquellencode von .NET Framework 4.6 MIT -Lizenz[47]
Mono MIT -Lizenz[48]
.NETZ (ehemals .net Core)
CoreFX, Coreclr und CLI
MIT -Lizenz[49]
.NET Micro Framework Apache -Lizenz 2.0[50]
.NET Compiler -Plattform (Codename "Roslyn") MIT -Lizenz[51]
ASP.NET MVC, Web -API und Webseiten (Webseiten (Rasierer)) Apache -Lizenz 2.0[52]
ASP.NET CORE Apache -Lizenz 2.0[53]
ASP.NET AJAX Control Toolkit BSD -Lizenz[54]
ASP.NET SignalR Apache -Lizenz 2.0[55]
Entität Framework Apache -Lizenz 2.0[56]
NuGet Apache -Lizenz 2.0[57]

Siehe auch

Anmerkungen

  1. ^ a b Die Lizenz wurde früher MS-RL abgekürzt, aber MS-RL bezieht sich nun auf die Microsoft wechselseitige Lizenz.
  2. ^ Dotfuscator Community Edition 4.0

Verweise

  1. ^ "Download .NET Framework 4.8 Offline Installer" ". Microsoft. Archiviert Aus dem Original am 15. August 2019. Abgerufen 15. August, 2019.
  2. ^ "Microsoft kommt mit Open Source an Bord". OpenSource.com. 19. November 2014. Abgerufen 2. Januar, 2020.
  3. ^ Gewarren. ".NET Framework & Windows OS -Version". docs.microsoft.com. Abgerufen 21. November, 2020.
  4. ^ "Standard ECMA-335: Gemeinsame Sprachinfrastruktur (CLI)". ECMA-international.org (6 ed.). ECMA. Juni 2012. Archiviert vom Original am 29. Juni 2013. Abgerufen 31. August, 2005.
  5. ^ "Standard ECMA-334: C# Sprachspezifikation". ECMA-international.org (4 ed.). ECMA. Juni 2006. Archiviert Aus dem Original am 31. Oktober 2010 2010. Abgerufen 31. August, 2005.
  6. ^ "ISO/IEC 23271: 2012 Informationstechnologie - Gemeinsame Sprachinfrastruktur". ISO.org (3 ed.). Internationale Standardisierungsorganisation. 13. Februar 2012.
  7. ^ "ISO/IEC 23270: 2006 - Informationstechnologie - Programmiersprachen - C#". ISO.org (2 ed.). Internationale Standardisierungsorganisation. 26. Januar 2012. Archiviert Aus dem Original am 6. Dezember 2010. Abgerufen 1. April, 2008.
  8. ^ "Microsofts leeres Versprechen". Kostenlose Software -Stiftung. 16. Juli 2009. Archiviert Aus dem Original am 19. August 2009 2009. Abgerufen 3. August, 2009. Es gibt jedoch mehrere Bibliotheken, die in Mono enthalten sind und häufig von Anwendungen wie Tomboy verwendet werden, die vom Standard nicht erforderlich sind. Und um klar zu sein, wir sprechen nicht über Windows-spezifische Bibliotheken wie ASP.NET und Windows Forms. Stattdessen sprechen wir über Bibliotheken unter dem System -Namespace, die gemeinsame Funktionalitätsprogrammierer in modernen Programmiersprachen erwarten
  9. ^ a b Guthrie, Scott (3. Oktober 2007). "Freisetzung des Quellcodes für das Netto -Framework". Scott Guthries Blog. Microsoft. Archiviert Aus dem Original am 7. September 2010. Abgerufen 15. September, 2010.
  10. ^ Guthrie, Scott (16. Januar 2008). ".NET Framework Library Quellcode jetzt verfügbar". Scott Guthries Blog. Microsoft. Abgerufen 28. Februar, 2015.
  11. ^ "Microsoft Patentversprechen für .NET -Bibliotheken und Laufzeitkomponenten". GitHub. Archiviert vom Original am 21. Februar 2021. Abgerufen 16. November, 2014.
  12. ^ Krill, Paul (1. April 2016). "Die Mono -Laufzeit von Xamarin erhält eine lockere Lizenz". InfoWorld. Idg.
  13. ^ Ferraira, Bruno (31. März 2016). "Xamarin kommt jetzt kostenlos mit Visual Studio". Der Tech -Bericht. Archiviert Aus dem Original am 2. April 2016. Abgerufen 12. April, 2016.
  14. ^ "Microsoft Patentversprechen für Mono". Mono auf Github. Mono -Projekt. 28. März 2016. Archiviert Aus dem Original am 16. April 2016. Abgerufen 16. April, 2016.
  15. ^ "Xamarin für alle". Xamarin Blog. Xamarin. 31. März 2016. archiviert von das Original am 12. April 2016. Abgerufen 12. April, 2016.
  16. ^ "Open Source von WPF, Windows Forms und Winui bei Microsoft Connect 2018 ankündigen". Windows Developer Blog. Microsoft. 4. Dezember 2018. archiviert von das Original am 15. Dezember 2018. Abgerufen 24. Dezember, 2018.
  17. ^ rpstrusha. "Kompilien von Apps mit .NET Native" zusammenstellen ". docs.microsoft.com. Archiviert Aus dem Original am 3. Dezember 2017. Abgerufen 2. Dezember, 2017.
  18. ^ "Basisklassenbibliothek". Abgerufen 1 Juni, 2008.
  19. ^ ".NET -Plattform Standard". GitHub. Archiviert Aus dem Original am 19. Mai 2016. Abgerufen 23. April, 2016.
  20. ^ "Ein Update auf ASP.NET Core 1.0 RC2". Abgerufen 23. April, 2016.
  21. ^ "Nuget Gallery - Home". Nuget.org. Archiviert vom Original am 21. Februar 2021. Abgerufen 21. Februar, 2021.
  22. ^ Gemischte (native und verwaltete) Baugruppen Archiviert 22. Oktober 2014 bei der Wayback -Maschine, Msdn
  23. ^ "Scott Guthrie: Silverlight und die plattformübergreifende CLR". Kanal 9. 30. April 2007. Archiviert Aus dem Original am 22. Mai 2015. Abgerufen 16. April, 2016.
  24. ^ "ECMA 335-Standard ECMA-335 Common Language Infrastructure (CLI) 4. Ausgabe (Juni 2006)". ECMA. 1. Juni 2006. archiviert von das Original am 14. Juni 2008. Abgerufen 1 Juni, 2008.
  25. ^ "ISO/IEC 23271: 2006". Standards.iso.org. 29. September 2006. Archiviert Aus dem Original am 1. Juli 2018. Abgerufen 17. April, 2012.
  26. ^ "Technischer Bericht TR/84 Common Language Infrastructure (CLI) - Informationen, die aus der Partition IV XML -Datei abgeleitet sind". ECMA. 1. Juni 2006. Archiviert Aus dem Original am 7. März 2015. Abgerufen 16. April, 2016.
  27. ^ "ECMA-334 C# Sprachspezifikation". ECMA. 1. Juni 2006. Archiviert Aus dem Original am 31. Oktober 2010 2010. Abgerufen 31. August, 2005.
  28. ^ "Standard ECMA-372 C ++/CLI Sprachspezifikation". ECMA. 1. Dezember 2005. archiviert von das Original am 10. August 2008. Abgerufen 16. Januar, 2008.
  29. ^ Gartner, Inc., wie in "Hype Cycle for Cyberthreats, 2006", September 2006, Neil Macdonald berichtet; Amrit Williams et al.
  30. ^ Cifuentes, Cristina (Juli 1994). "6: Kontrollflussanalyse" (PDF). Umkehrkompilierungstechniken (These). Queensland University of Technology. Archiviert von das Original (PDF) am 22. November 2016.
  31. ^ a b c "Müllsammlung: Automatisches Speichermanagement im Microsoft .NET -Framework". Archiviert von das Original am 3. Juli 2007. Abgerufen 1 Juni, 2008.
  32. ^ a b c "Müllsammlung in .net". Archiviert von das Original am 25. Mai 2008. Abgerufen 1 Juni, 2008.
  33. ^ "Das .NET Framework 4.5 enthält neue Verbesserungen des Müllsammlers für Client- und Server -Apps.". Abgerufen 2. Oktober, 2015.
  34. ^ a b c d "Müllsammlung - Teil 2: Automatisches Speichermanagement im Microsoft .NET -Framework". Archiviert von das Original am 26. Juni 2007. Abgerufen 1 Juni, 2008.
  35. ^ "Verständnis .net Just-in-Time Compilation". Telerik.com. 28. Mai 2013. Archiviert Aus dem Original am 11. Juni 2013. Abgerufen 21. Mai, 2015.
  36. ^ a b MSIL zu nativem Code kompilieren Archiviert 19. April 2015 bei der Wayback -Maschine, MSDN, Microsoft
  37. ^ "Garbage Collection in .net" verstehen ". 17. Juni 2009.
  38. ^ "Release Notes Mono 2.2 - Mono". mono-project.com.
  39. ^ "Monos SIMD -Unterstützung: Mono sicher für das Spielen". Tirania.org. 3. November 2008. Archiviert Aus dem Original am 4. November 2010. Abgerufen 17. April, 2012.
  40. ^ "Monos SIMD -Unterstützung: Mono sicher für Spiele - Miguel de Icaza". tirania.org. Abgerufen 6. Mai, 2022.
  41. ^ "SIMD-beschleunigte Typen in .net". docs.microsoft.com. Abgerufen 6. Mai, 2022.
  42. ^ ISO 9001: 2008, Vorwort
  43. ^ Fairbairn, Christopher (1. April 2008). "Verwenden von VB.NET mit dem .NET Micro Framework«/dev/mobil "". /dev/mobil. Archiviert von das Original am 27. Februar 2018. Abgerufen 17. April, 2012.
  44. ^ "Crossnet". Codeplex.com. Archiviert Aus dem Original am 25. Januar 2010. Abgerufen 17. April, 2012.
  45. ^ "Microsoft .NET Framework Neuverteilbarer EULA". Msdn. Microsoft. Archiviert Aus dem Original am 2. April 2015. Abgerufen 28. Februar, 2015.
  46. ^ Bray, Brandon (15. August 2012). "Ankündigung der Veröffentlichung von .NET Framework 4.5 RTM - Produkt- und Quellcode". .NET Framework Blog. Microsoft. Archiviert Aus dem Original am 4. Oktober 2016. Abgerufen 18. August, 2016.
  47. ^ "Ankündigung von .NET 2015 Vorschau: Eine neue Ära für .NET". .NET Framework Blog. Microsoft. 12. November 2014. Archiviert Aus dem Original am 19. August 2016. Abgerufen 18. August, 2016.
  48. ^ "Xamarin für alle". Xamarin Blog. Microsoft. 17. April 2016. Archiviert vom Original am 12. April 2016. Abgerufen 12. April, 2016.
  49. ^ ".Net Core 5". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 17. Februar 2015. Abgerufen 17. Februar 2015.
  50. ^ ".NET Micro Framework". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 17. Februar 2015. Abgerufen 17. Februar 2015.
  51. ^ "Roslyn Lizenz". GitHub. .NET Foundation. 5. Februar 2020. Archiviert Aus dem Original am 24. März 2018. Abgerufen 14. April, 2018.
  52. ^ "ASP.NET MVC, Web API und Webseiten (Razor)". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 17. Februar 2015. Abgerufen 17. Februar 2015.
  53. ^ "ASP.NET CORE -Lizenz". GitHub. .NET Foundation. 5. Juli 2017. Archiviert vom Original am 21. Februar 2021. Abgerufen 14. April, 2018.
  54. ^ "ASP.NET AJAX Control Toolkit". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 17. Februar 2015. Abgerufen 17. Februar 2015.
  55. ^ "ASP.Net SignalR". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 17. Februar 2015. Abgerufen 17. Februar 2015.
  56. ^ "Entity Framework". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 18. April 2016. Abgerufen 16. April 2016.
  57. ^ "Nuget". DotNetFoundation.org. .NET Foundation. Archiviert von das Original am 17. Februar 2015. Abgerufen 17. Februar 2015.

Externe Links