C#-Anwendung auch ohne .NET Framework lauffähig machen


PHLIPPVS

Grünschnabel
Hallo an alle,

mein Problem besteht, wie das Thema schon verrät, darin, ein in C# geschriebens Programm unter WinXP bzw. idealerweise sogar unter Linux/Mac zum Laufen zu bekommen, auch ohne Microsoft .NET Framework.

Vielen herzlichen Dank im Vorraus für eure Antworten,

MfG Philipp
 

tass

Mitglied
Hallo,

ich erzähls mal so wie ichs kenn.
Beim kompilieren von C# wird kein Binärcode erzeugt sondern Vorcode erstellt.
Zur Laufzeit wird erst der Binärcode erstellt, das macht die .Net Runtime.

1.Gibt es eine entsprechende Runtime unter Linux würde es dort auch laufen.

2.Wenn der Kompiler Binärcode erzeugen würde, würde das Programm auch ohne Runtime laufen, aber nur auf der Plattform auf der es kompiliert wurde
(in diesem fall wohl Windows).

hoffe das alles stimmt was ich da schreib ;-)

by Tass
 

Alexander Schuc

crazy-weasel
Hallo.

C# ist als eine Sprache gedacht, welche in der .net Umgebung abläuft, und die Vorteile davon nutzt. (In Bezug auf Security etc. ..)
Deswegen wirst wohl nicht ohne .net Framework auskommen.

MfG,
Alex
 

Sunray

Erfahrenes Mitglied
Stimmt. Es wird MSIL (Microsoft intermediate language) Code erzeugt, der erst kurz vorm Ausführen in Maschienencode umgewandelt wird.

Es gibt eine Möglichkeit ein Maschienencode-Abbild deines Programmes anzufertigen. Musst mal in der SDK-Dokumentation suchen.
Du darfst dann aber nicht vergessen die Laufzeit DLLs mitzuliefern (System.dll, System.Xml.dll usw...).

Allerding wird es nicht ohne Framework funktionieren, da der Arbeitsspeicher von selbem verwaltet wird (Heap). Glaube ich jedenfalls zu wissen.

Die 20 Mb grosse dotnetredist.exe zuvor installieren zu lassen ist doch auch kein so grosses Problem...
Bei Java funktioniert das ja auch.
 

wertzui

Mitglied
Soweit ich weiß, haben sich ein par Leute drangesetzt, eine art .net Framework für Linux zu coden und, es gibt auch schon eine erste Version.
Musst am besten mal bei Google suchen.
 

René Paschold

Erfahrenes Mitglied
.NET Programme ohne Framework GEHT NICHT !

Egal was du machst, du wirst für .NET Programme immer mindestens das Restri Paket brauchen (ca. 21 MB).

Kurzer Hintergrund zu .NET!

Die Runtime, CommonLanguageRuntime (CLR) führt eigentlich keinen C# oder VB.NET Code aus. Wenn man mit den entsprechenden Compilern kompiliert, dann wird MSIL (MicrosoftIntermediatLanguage) Code erzeugt. Dieser Code wird zur Laufzeit in Native Code kompiliert und dann erst vom Prozessor ausgeführt. Deswegen auch der etwas verzögerte Startvorgang!

Im Prinzip ist C# oder VB.NET nur die Kelle eines Maurers, du könntest auch IL Code selber schreiben.

Warum gibt es IL? Nun, das ist relativ einfach zu beantworten sieht man sich die Architektur des Frameworks mal genauer an. Die FCL (FrameworkClassLibrary) besteht aus ca. 5000 Klassen. Mircosoft hat natürlich nicht das Rad neu erfunden und ein System geschaffen, das zu 60% API Funktionen kapselt und auführt. Der Grund hierfür ist, das alle Programmiersprachen, die einen .NET Compiler bietet auf die gleiche Art und Weise diese Klassen verwenden können. Entstanden ist ein einheitliches Objekt und Programmiermodell welches für jeden Sprache und auf jeder Plattform gleich funktioniert.

Das funktioniert deshalb, da in der CLS (CommonLanguageSpecification) und dem CTS (CommonTypeSystem) alle Grundlagen verankert sind an die sich ein Compiler halten muss, um typesicheren IL Code zu erzeugen.

Das ist der grob erklärte Hintergrund warum also die Runtime immer benötigt wird. Es gibt zwar ein Tool welches sich ngen.exe nennt mit dem man den IL Code vorkompilieren kann, aber trotzdem wird dieser Code später von der CLR übermacht und ausgeführt (deshalb spricht man von .NET Code auch Managed Code). Der Vorteil dieses Tools besteht lediglich darin, die Startzeit zu normalisieren.

Das war mal gaaaanz grob eine Einführung in .NET :D

Grüße
 

Darkas

Erfahrenes Mitglied
Das interessiert mich jetzt. Dieses ngen.exe kann die Laufzeit eines Programms verbessern? Ist doch eigentlich super!
 

Nico Graichen

aka gemballa
NGEN verbessert nicht die Laufzeit des Programms sondern, wie von René geschrieben, das Laden bzw. Starten.
Beim Aufruf einer .NET-Assembly wird diese durch ngen in Maschinen-Code kompiliert, so dass sie vom Prozessor ausgeführt werden kann.
Durch das händische Ausführen von ngen wird nur das Laden der Assemblies beschleunigt, da dies von der Runtime nicht mehr gemacht werden muss.
Dies kann jedoch erst nach der Distribution durchgeführt werden, da das Resultat von System zu System verschieden ist (bzw. Prozessor).

Selbiges gilt übrigens auch für xgen, welcher die Serialisierungs-Assemblies erstellt.
Dies kann auch von Hand gemacht werden, so dass die SerialsierungsAssemblies nicht zur Laufzeit erzeut werden müssen. Dies macht jedoch nur Sinn, wenn in der entsprechenden Assembly auch Serialisierung genutzt wird ;)