2 Stimmen

.NET: Ausrichtung auf die Laufzeit

Ich beginne, mich eingehend mit dem .NET-Framework und seiner Common Language Runtime zu befassen. Ich lese gerade ein .NET-Übersicht von Microsoft und ich bin mir nicht sicher, was mit dieser Aussage gemeint ist.

Code, der auf die Laufzeit abzielt, ist bekannt als verwalteter Code, während Code, der nicht auf die Laufzeit abzielt, wird als nicht verwalteter Code.

Wie kann man die Common Language Runtime ansprechen? Ich weiß, seine standardmäßig bei der Entwicklung in Visual Studio, aber wie würden Sie speziell Ziel der CLR?

Welcher Code bei der Entwicklung einer .NET-Anwendung würde nicht auf die CLR abzielen und dadurch aufgerufen werden unverwalteter Code ?

4voto

Logan Capaldo Punkte 38523

Zielgerichtet auf die Laufzeit bedeutet, dass für die Laufzeit kompiliert wird, d. h. unter anderem, dass CIL bzw. MSIL ausgegeben wird (im Gegensatz zu x86/x64/etc. Maschinencode).

Die Aussage, dass alles, was nicht auf die Laufzeit abzielt, "nicht verwalteter Code" ist, ist eine falsche Dichotomie. Code, der zum Beispiel auf der JVM läuft, ist wohl verwaltet, aber ich denke, wir können den Satz in diesem Zusammenhang so verstehen, dass er "unverändert [durch die CLR]" bedeutet.

Es wäre möglich, einen C#-Compiler zu schreiben, der nativen Code ausspuckt und nicht auf die Laufzeitumgebung abzielt (auch wenn Sie wahrscheinlich einige Laufzeit für GC mindestens), und es ist ebenso möglich, einen C-Compiler zu schreiben, der CIL ausspuckt. In diesem Beispiel würde der hypothetische C#-Compiler nicht auf die Laufzeit abzielen, aber der hypothetische C-Compiler würde es. Der wichtige Unterschied ist hier die Trennung von Sprache und Ziel.

Eine .NET-Anwendung, die nicht auf die Runtime ausgerichtet ist, wäre ein Widerspruch. Wenn sie nicht auf die Laufzeit abzielen würde, wäre sie keine .NET-Anwendung.

Es kann aber noch unschärfer werden, wenn unsafe y P/Invoke . Wenn Sie Funktionen wie P/Invoke oder COM-Interop, müssen Sie am Ende die Runtime anvisieren und zusätzlich einige andere Dinge . Das bedeutet nicht, dass Sie nicht mehr auf die Laufzeitumgebung abzielen, sondern nur, dass Sie zusätzliche Abhängigkeiten über die Laufzeitumgebung hinaus haben. Um diese Dinge im Auge zu behalten, gibt es Dinge wie das CLSCompliantAttribute existieren.

2voto

Puppy Punkte 141483

Der gesamte Code, der auf dem .NET-Framework läuft, ist verwalteter Code. Ein Beispiel für nicht verwalteten Code ist C++, der als nicht verwalteter oder nativer Code bezeichnet wird.

2voto

Hans Passant Punkte 894572

Es ist ein unscharfer Begriff und bedeutet "die Konfiguration der Build-Tools, um ein Binärabbild zu erzeugen, das mit der verwalteten Laufzeit kompatibel ist". Eine ausführbare Datei, die verwalteten Code ausführen kann, folgt dem Standard-PE32-Dateiformat. Sie kennen es als EXE- und DLL-Dateien. Ein solches binäres Abbild wird in der .NET-Sprache "Assembly" genannt. Sein Format ist gut dokumentiert in diesem Ecma-Standarddokument .

Die meisten gebräuchlichen Build-Tools sind sehr spezifisch für die Erstellung von verwalteten Assemblies. Wie csc.exe und vbc.exe, bzw. die C# und VB.NET Compiler. Einige Tools können beide erzeugen und müssen mit den richtigen Befehlszeilenoptionen ausgeführt werden, um das gewünschte Endergebnis zu erhalten. Wie cl.exe und link.exe, der Compiler und Linker für C/C++ mit eingebauter Unterstützung für die Sprache C++/CLI. Sie können auch Assemblies erstellen, die eine Mischung aus verwaltetem AWL- und Maschinencode enthalten.

Vor allem die beiden letztgenannten Tools sind nicht so einfach zu verwenden, um die verwaltete Laufzeit zu erreichen. Es ist die Aufgabe der IDE und des in Visual Studio integrierten Build-Systems, dies zu erleichtern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X