Lassen sich .NET Anwendungen statisch kompilieren?



  • Hallo, bis jetzt habe ich immer mit C++ gearbeitet und meine Programme Statisch erstellt, so kann man die Anwendungen auch auf anderen Systemen starten. Geht das bei Anwendungen mit C# auch, also die Anwendung starten auf Systemen ohne .NET Framework`?



  • Neine ohne .NET Framework läuft C# nicht.
    Ich glaube es gab da eine Methode womit man das Framework in das Programm integrieren kann.
    Aber 1. geht das nicht bei jedem Programm.
    Und 2. Wird die Anwendung dadurch verdammt groß.



  • Die einzige, mir bekannte, Möglichkeit, die man hat ist der Native Image Generator (ngen.exe) mit diesem kann man die Executables "vorkompilieren", so dass das Kompilieren zur Laufzeit weg fällt (JIT-Compiler).
    Das .Net-Framework benötigt man aber weiterhin auf dem Rechner. Außerdem verliert man durch das "vorkompilieren" die Betriebssystem- und Prozessorunabhängigkeit.



  • Aber gab es nicht eine Möglichkeit nur die benötigten .NET Komponenten zu integrieren?



  • lord_fritte schrieb:

    Aber gab es nicht eine Möglichkeit nur die benötigten .NET Komponenten zu integrieren?

    Da gibt es irgend so ein Third Party Teil, das Unsummen kostet. Aber mit dem wird eine Hello-World-Anwendung bereits 15 MB groß. Fazit: Es lohnt sich nicht.
    Wenn du also mit C# programmieren und die Programme als native Exe-Dateien erstellen willst: Vergiss es am besten gleich wieder. Solange du nicht selbst einen Compiler und eine native Win32-Implementierung des .NET-Frameworks entwickelst, stehen die Chancen bei 0, das zu erreichen. (Es sei denn, wie gesagt, du hast ein paar Hunderter zum aus dem Fenster werfen und es macht dir nichts aus, wenn eine simple Konsolenanwendung 15 MB groß ist.)



  • Jam schrieb:

    Da gibt es irgend so ein Third Party Teil, das Unsummen kostet. Aber mit dem wird eine Hello-World-Anwendung bereits 15 MB groß. Fazit: Es lohnt sich nicht.
    Wenn du also mit C# programmieren und die Programme als native Exe-Dateien erstellen willst: Vergiss es am besten gleich wieder. Solange du nicht selbst einen Compiler und eine native Win32-Implementierung des .NET-Frameworks entwickelst, stehen die Chancen bei 0, das zu erreichen. (Es sei denn, wie gesagt, du hast ein paar Hunderter zum aus dem Fenster werfen und es macht dir nichts aus, wenn eine simple Konsolenanwendung 15 MB groß ist.)

    Das "lohnt sich nicht" würde ich so pauschal nicht sagen. Sicherlich, wenn du nur privat ein kleines Tool entwickelst und über's Internet kostenlos vertreiben willst, lohnt sich die Lizenz nicht.
    Wenn du aber eine Software kommerziell vertreibst, z.B. auf CD, dann ist die Größe des Kompilats (meistens) unwichtig und die paar Hunderter (oder wieviel das kostet) sind geschenkt. Mal ein bisschen über das Hobby-Programmieren hinausdenken 😉



  • @Badestrand
    Wieso sollte man wenn man kommerziell was macht das Programm "native" compilieren wollen, und nochdazu das Framework mit reinkompilieren?
    Mir fällt gerade kein Anwendungsbereich ein wo ich das für sinnvoll halten würde.



  • hustbaer schrieb:

    @Badestrand
    Wieso sollte man wenn man kommerziell was macht das Programm "native" compilieren wollen, und nochdazu das Framework mit reinkompilieren?
    Mir fällt gerade kein Anwendungsbereich ein wo ich das für sinnvoll halten würde.

    Ist jedenfalls schon sehr speziell.
    Ein Beispiel-Anwendungsfall (den ich so ähnlich gerade real habe): Du hast Software, deren Daten deine Kunden an allen möglichen Rechnern (an der Arbeit an ein paar Rechnern und noch zu Hause z.B.) bearbeiten wollen. Die Software liegt dann z.B. zusammen mit allen Daten auf einem Memory-Stick, die Software benötigt keine Installation und wird direkt vom Stick gestartet. In dem Fall sollte man ja schon nativ kompilieren, man will den Benutzer ja zu keiner Installation zwingen. Ob man da .NET-Anwendungen nimmt, darüber kann man natürlich streiten, aber es steht dem immerhin nichts im Wege 🙂



  • Auf jeden Fall sollte das sehr genau überlegt sein da das ganze sicherlich nicht ohne Seiteneffekte verläuft.

    @Badestrand: Kann man damit nur .Net Komponenten zusammenmischen (kenne ich) oder kann man auch das gesamte Framework da rein quetschen ?
    Ich entsinne mich an Beiträgen bei denen man das Framework lokal im Appverzeichnis packen wollte und das nicht geklappt hat.



  • Knuddlbaer schrieb:

    @Badestrand: Kann man damit nur .Net Komponenten zusammenmischen (kenne ich) oder kann man auch das gesamte Framework da rein quetschen ?
    Ich entsinne mich an Beiträgen bei denen man das Framework lokal im Appverzeichnis packen wollte und das nicht geklappt hat.

    Ups, hab mich wohl doof ausgedrückt, der Beispiel-Anwendungs-Fall von oben wird in C++ entwickelt, ich meinte nur, dass das auch ein möglicher Fall für "nativen" .NET-Code wäre. Ich selber hab noch nie damit gearbeitet und kenne auch nur NGen, was ja immer noch das installierte .NET-Framework benötigt. Irgendwie hab ich aus den Posts weiter oben entnommen, dass es ein Tool gäbe (gibt's wohl nicht?), das auch die Framework-Abhängigkeit kickt.



  • @Badestrand:
    Also so "portable" Anwendungen für USB Stick etc. mit .NET zu entwickeln halte ich für eine ganz doofe Idee, eben wegen dieser Schwierigkeiten.

    Du hast aber natürlich Recht, das wäre ein Anwendungsfall.


Anmelden zum Antworten