Es ist nicht möglich eine .NET Anwendung ohne einer installierten .NET Framework auszuführen. Genau wie Java, erstellt der Compiler die Anwendung selbst in einer Zwischensprache, die so auf keinem gängigen Prozessor direkt ausgeführt werden kann. Die .NET Anwendungen bestehen zum größten Teil aus MSIL Code(In Java wäre das byte-code genannt), der sieht in etwa so:
Code:
.method private hidebysig void InitializeComponent() // CODE XREF: sub_110+10p
{
nop
ldarg.0
newobj void [System]System.ComponentModel.Container::.ctor()
stfld class [System]System.ComponentModel.IContainer WindowsApplication1.Form1::components
ldarg.0
ldc.i4.1
call void [System.Windows.Forms]System.Windows.Forms.ContainerControl::set_AutoScaleMode(value class [System.Windows.Forms]System.Windows.Forms.AutoScaleMode)
nop
ldarg.0
ldstr "Form1"
callvirt void [System.Windows.Forms]System.Windows.Forms.Control::set_Text(class System.String)
nop
ret
}
Dieser Code wird von der CLR (Common Language Runtime) "interpretiert" und ein prozessspezifischer Maschinencode wird generiert(JIT-Compiler). Auf den gängigen Maschinen wird das x86ASM sein, welcher direkt ausgeführt werden kann. Ohne einer installierten .NET Framework, ist dieser Vorgang nicht möglich und Windows weiss damit nichts anzufangen.
Sicherlich würde einer auf die Idee kommen, einfach die Executable nach dem generieren des prozessorspezifischen Codes einfach rauszunehmen und weiter zu geben. Leider ist das nicht so einfach, das wäre trotzdem nicht lauffähig. Schauen wir einfach in den Ordner der Framework (bei mir "C:\WINDOWS\Microsoft.NET\Framework \v2.0.50727") und wir werden da einige Files finden die wir als .NET Entwickler kennen sollten z. B. das 2MB große System.dll oder System.Data.dll. Diese Assemblys werden von der .NET Anwendung gelinkt. Es bedarf also ein wenig mehr als nur der Exe.
Theoretisch ist es möglich alles was man braucht, "irgendwie" in die eigene .NET Anwendung zu integrieren, aber braucht man das ernsthaft? Ein Teil der Anwendung müsste trotzdem in einem plattformabhängigen Maschinencode vorliegen, sonst wäre es gar nicht möglich beim Entrypoint der .NET Anwendung anzusetzen(vorher müssen z. B. die oben genannten Assemblys extrahiert werden).
Eine kleine WinForm würde dann um 10-20 MB groß sein(grobe/ungenaue Schätzung meinerseits
)