C# öffnen ohne .framenetwork?

09/14/2006 19:14 Wanderwichtl#1
hi,
so ich hab folgendes problem...
ich habe etwas programmiert und würde es gerne auf anderen pc öffnen, dass funzt natürlich nicht, weil die kein .netframework besitzen. hat wer ne ahnung wie man es doch hinbekommt das diese datei sich ohne .netframework öffnen kann?
wäre nett ;)
09/14/2006 19:47 Leonino#2
es muesste eigentlich moeglich sein z.b. mit c++ die dateien die man brauch einzubinden und zu entpacken bevor das .net programm gestartet wird so wuerd ich das versuchen
09/14/2006 20:21 sirru#3
Was spricht dagegen einfach .NET zu installieren?
09/14/2006 21:34 SilonVier#4
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;))
09/17/2006 13:29 Wanderwichtl#5
danke für die antworten :)