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.