Laden...

Mono Projekt Ohne Mono Installation auf Linux ausführen

Erstellt von Nexus633 vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.388 Views
N
Nexus633 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren
Mono Projekt Ohne Mono Installation auf Linux ausführen

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ß

16.807 Beiträge seit 2008
vor 8 Jahren

Ein kurzer Blick in die offizielle Doku hätte Dir sofort die Antwort gegeben
Embedding Mono

N
Nexus633 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Hey,
Danke für die Info 😃 die Dokumentation bin ich durchgegangen nur beim verstehen harpet es 😃
Daher frage ich hier um Unterstützung 😃.

L
95 Beiträge seit 2009
vor 8 Jahren

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.

F
174 Beiträge seit 2007
vor 8 Jahren

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 ...

16.807 Beiträge seit 2008
vor 8 Jahren

Das ist schon für viele Anwendungen praktisch, wenn die Systemanforderungen möglichst keine Dependencies beinhalten sollen.

L
95 Beiträge seit 2009
vor 8 Jahren

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

N
Nexus633 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

Hey,

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:

>

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 😃

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ß

L
95 Beiträge seit 2009
vor 8 Jahren

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

N
Nexus633 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

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 ?

16.807 Beiträge seit 2008
vor 8 Jahren

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

F
10.010 Beiträge seit 2004
vor 8 Jahren

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.

N
Nexus633 Themenstarter:in
54 Beiträge seit 2015
vor 8 Jahren

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.

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ß

L
95 Beiträge seit 2009
vor 8 Jahren

Lies dir doch bitte einfach die von mir geposteten Links durch. Dort steht das eins zu eins drin.

16.807 Beiträge seit 2008
vor 8 Jahren

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?!