Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Mono Projekt Ohne Mono Installation auf Linux ausführen
Nexus633
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

Mono Projekt Ohne Mono Installation auf Linux ausführen

beantworten | zitieren | melden

Hallo,
ich beschäftige mich gerade mit Mono.

Ich habe mir ein kleine Test Programm geschrieben... Naja was heißt geschrieben - ist ein einfaches Hello World. Das Hello world reicht aber aus um zu testen wie ich dieses Projekt ohne Mono zu Installieren auf einem Frisch Installiertem Debian System auszuführen.

Ich habe einen ansatz gefunden das es mir ermöglicht die datei ohne mono hallo.exe auszuführen.


using System;

namespace Mono_Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hallo Mono Welt !");
        }
    }
}

root@srv003-Debian-Mono:/home# mcs hallo.cs
root@srv003-Debian-Mono:/home# mkbundle --static hallo.exe -o hallo

nun kann ich das Programm mit ./hallo ausführen und es kommt:

root@srv003-Debian-Mono:/home#
Hallo Mono Welt !
root@srv003-Debian-Mono:/home#

Nun möchte ich das Programm auf einem Frisch Installiertem Debian System ausführen.
Es kommt:

root@srv001-Debian:/home#./hallo

The assembly mscorlib.dll was not found or could not be loaded.
It should have been installed in the `/usr/lib/mono/4.5/mscorlib.dll' directory.

Was auch Logisch ist, da Mono nicht Installiert ist :-) Es ist Möglich die assembly manuel in den Ordner "/usr/lib/mono/4.5/" zu kopieren. Das Programm lässt sich nun ausführen.

Das soll aber nicht sinn und Zweck der geschichte sein. Mir ist aufgefallen das dass Spiel (Server)

7 Days to Die in C# auf Mono geschrieben wurde und ohne Installation von Mono ausgeführt werden kann.

Nun meine eigentliche Frage:
Wie funktioniert das ganze ? Ist es überhaupt möglich oder Tricksen die Entwickler von "7 Days to Die" ?

Mit freundlichem Gruß
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nexus633 am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Ein kurzer Blick in die offizielle Doku hätte Dir sofort die Antwort gegeben
Embedding Mono
private Nachricht | Beiträge des Benutzers
Nexus633
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

Hey,
Danke für die Info :-) die Dokumentation bin ich durchgegangen nur beim verstehen harpet es :-)
Daher frage ich hier um Unterstützung :-).
private Nachricht | Beiträge des Benutzers
Lenny
myCSharp.de - Member



Dabei seit:
Beiträge: 95

beantworten | zitieren | melden

Naja die Idee dabei ist doch, dass man ein C Programm erstellt, dass die komplette Mono Runtime enthält in die dann dein C# Code geladen wird.

Und die nötigen Schritte dazu werden auch im Artikel beschrieben.
D.h. erstell dir eine main.c Mit dem Code wie unter: Initializing the Mono runtime
Danach kompilierst du das unter Linux mit:

gcc main.c `pkg-config --cflags --libs mono-2`

Und es sollte eine executable dabei rausfallen.
private Nachricht | Beiträge des Benutzers
felix
myCSharp.de - Member



Dabei seit:
Beiträge: 174

beantworten | zitieren | melden

Hi,

das gehört jetzt vielleicht nicht unbedingt zum Thema ... aber wieso möchtest du auf dem System keine Mono-Runtime installieren? Ich wüsste auf Anhieb nicht, was dagegen sprechen könnte. Es sei denn, es ist ein Produktivsystem, dessen Konfiguration aus irgendwelchen Gründen nicht angefasst werden darf.

Dass man die Mono-Runtime in das Programm mit rein packen kann, wusste ich noch nicht. Aber ist das nicht ein bisschen viel Overhead? Du musst das ja dann für jedes Projekt machen ...
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Das ist schon für viele Anwendungen praktisch, wenn die Systemanforderungen möglichst keine Dependencies beinhalten sollen.
private Nachricht | Beiträge des Benutzers
Lenny
myCSharp.de - Member



Dabei seit:
Beiträge: 95

beantworten | zitieren | melden

Hey,
was du auch noch versuchen kannst ist das tool mkbundle. Das generiert dir aus deiner Anwendung und mono eine einzelne Executable. Sollte für deinen Zweck ausreichen:
Für mehr Informationen siehe hier:
http://www.mono-project.com/docs/advanced/runtime/#bundles
private Nachricht | Beiträge des Benutzers
Nexus633
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

Hey,
Zitat von Lenny
Hey,
was du auch noch versuchen kannst ist das tool mkbundle. Das generiert dir aus deiner Anwendung und mono eine einzelne Executable. Sollte für deinen Zweck ausreichen:
Für mehr Informationen siehe hier:
http://www.mono-project.com/docs/advanced/runtime/#bundles

mkbundle verwende ich bereits bringt aber nichts auf einem Frischen System. Es geht mehr darum das sobald das Produkt veröffentlich wird, Leute sich das Paket runterladen können und ausführen können ohne noch 20 weitere Pakete installieren zu müssen.

Das beste beispiel was ich nannte ist der Server 7 Days to Die :-)
Zitat von felix
Hi,

das gehört jetzt vielleicht nicht unbedingt zum Thema ... aber wieso möchtest du auf dem System keine Mono-Runtime installieren? Ich wüsste auf Anhieb nicht, was dagegen sprechen könnte. Es sei denn, es ist ein Produktivsystem, dessen Konfiguration aus irgendwelchen Gründen nicht angefasst werden darf.

Dass man die Mono-Runtime in das Programm mit rein packen kann, wusste ich noch nicht. Aber ist das nicht ein bisschen viel Overhead? Du musst das ja dann für jedes Projekt machen ...

Aus diesem grund :-).

Mit freundlichem Gruß
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nexus633 am .
private Nachricht | Beiträge des Benutzers
Lenny
myCSharp.de - Member



Dabei seit:
Beiträge: 95

beantworten | zitieren | melden

Dann verwendest du mkbundle falsch. Wenn du mono statisch dagegen linkst sind alle nötigen Libraries mit in der executable.
private Nachricht | Beiträge des Benutzers
Nexus633
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

Zitat von Lenny
Dann verwendest du mkbundle falsch. Wenn du mono statisch dagegen linkst sind alle nötigen Libraries mit in der executable.

Ja dann verwende ich es falsch... Wie funktioniert das denn ? Meine kenntnisse mit verlinken über die Konsole sind = 0 leider ^^... Kann mir da jemand den richtigen ansatz liefern ?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Warum liest Du nicht einfach die Dokumentation, schaust Dir Tutorials an.
Also bei aller Liebe.. aber ein bisschen Eigeninitiative kann man verlangen.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.976

beantworten | zitieren | melden

Zitat
Es geht mehr darum das sobald das Produkt veröffentlich wird, Leute sich das Paket runterladen können und ausführen können ohne noch 20 weitere Pakete installieren zu müssen.
Dann hast du aber die PackageManager von Linux komplett falsch verstanden und fällst auf diejenigen Linuxer rein die meinen die reine Leere ( ist so gemeint ) zu vertreten.

Wenn du dein Package richtig erstellst, werden die richtigen Dependencies mit installiert.

Ich persönlich würde es blöder finden wenn jede mini Anwendung das ganze Mono mitbringen würde.
private Nachricht | Beiträge des Benutzers
Nexus633
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
Warum liest Du nicht einfach die Dokumentation, schaust Dir Tutorials an.
Also bei aller Liebe.. aber ein bisschen Eigeninitiative kann man verlangen.

Das werde ich :-) Tut mir leid.
Zitat von FZelle
Dann hast du aber die PackageManager von Linux komplett falsch verstanden und fällst auf diejenigen Linuxer rein die meinen die reine Leere ( ist so gemeint ) zu vertreten.

Wenn du dein Package richtig erstellst, werden die richtigen Dependencies mit installiert.

Ich persönlich würde es blöder finden wenn jede mini Anwendung das ganze Mono mitbringen würde.

Das ist mir durchaus bewusst. Wäre nicht das erste Paket von mir :-) Dennoch dient die Software als schnittstelle und daher wäre es unnötig eine gesammte runtime zu Installieren. Daher frage ich hier :-)

Aber jeder hat da eine andere Meinung :-) Du siehst es so und ich so :-).
Trtzdem danke an alle :-)

Mit freundlichem Gruß
private Nachricht | Beiträge des Benutzers
Lenny
myCSharp.de - Member



Dabei seit:
Beiträge: 95

beantworten | zitieren | melden

Lies dir doch bitte einfach die von mir geposteten Links durch. Dort steht das eins zu eins drin.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden

Wenn das ein Produkt werden soll, das kommerziell vertrieben wird, dann würde ich FZelle's Aussage nicht sooo einfach auf die kalte Schulter nehmen.
Meiner Meinung nach ein zur kurz gedachter Gedanke und wirkt eher bockig.

Es gibt bei Firmen durchaus die Policy, dass die Software die Mono Variante nehmen muss, die über die interne Paketverwaltung zur Verfügung gestellt wird.
Zeitgleich gibts aber auch Firmen, die besagen, dass keine Runtime installiert werden darf -> Embedded mitliefern.

Du würdest Dir also wahrscheinlich, je nach Zielgruppe, einen Gefallen machen, wenn Du Dich hier nicht so starr verhälst.
Sonst würdest Du Dir wahrscheinlich den ein oder anderen Kunden vergraulen.

Das ist auch keine Meinungs-Sache mit "ich seh das so, du so".
Das hat auch was von Integrität zutun. Ich hätte kein Bock auf ein 20MB Produkt, was ne 800 MB Runtime mitbringt; obwohl sie evtl. schon vorhanden ist.

Und was wäre da, wenn es einen Bug in der Runtime gibt, Dein Produkt nicht mehr weiterentwickelt wird aber man es - wenn man es als Paket-Runtime verwendete hätte - patchen könnte?!
private Nachricht | Beiträge des Benutzers