Ich versuche, mit Mono anzufangen, aber ich kämpfe mit der Dokumentation, Blogs und anderen Fragen zu SO. Hoffentlich wird diese Frage für andere nützlich sein.
Ich möchte einen Datenerfassungsprozess in C # mit VS2013 schreiben, da dies meine Muttersprache ist, aber ich muss es auf einer Linux-Box ausführen. Es gibt keine Benutzeroberfläche, es ist eine Konsolenanwendung.
Angenommen, Mono (aber nicht MonoDevelop) ist auf der Ziel-Linux-Box installiert, muss ich mein .csproj anders kompilieren, um unter der Mono-CLR unter Linux zu laufen, und wenn ja, wie kompiliere ich ein Projekt als im Gegensatz zu Beispielen, die eine einzige CS-Datei kompilieren?
Soll ich MonoDevelop für Windows installieren, öffne meine Lösung / Projekt in dieser IDE und kompiliere sie für Linux, kopiere die Ausgabedateien und führe die .exe dort aus?
Andernfalls funktioniert die IL in einer MSBuild-kompilierten .EXE-Assembly unter Linux nur unter Linux, und referenzierte Assemblys werden in Ordnung geladen (vorausgesetzt, sie befinden sich alle im Ausgabeordner)? Muss ich über beliebige .NET Framework-Assemblys kopieren?
Eine sehr gute Antwort auf Ihre Frage finden Sie in der Mono-FAQ :
Ist Mono-Binärdatei mit Windows kompatibel?
Ja, Mono ist binärkompatibel mit Windows. Was bedeutet, dass Sie können Ausführen von Binärdateien, die von .NET-Compilern von Microsoft und anderen erstellt werden Anbieter.
Wenn Sie Ihre Anwendungen portieren, sollten Sie sicherstellen, dass Sie sie testen Funktionalität als Unterschiede im zugrunde liegenden Betriebssystem und Unterschiede in den VM-Implementierungen (Bugs, fehlende Features) könnten beeinflussen Ihre Anwendung.
Mono hat nicht jede .NET 1.1 API implementiert (siehe Mono Release Notes für Mono 1.0) und beim Ausführen einer Binärdatei von Windows Wenn Sie eine nicht implementierte API verwenden, erhalten Sie möglicherweise eine obskure Nachricht über Token nicht gefunden werden.
In diesen Fällen ist es nützlich, Ihre Anwendung mit Monos C # zu kompilieren. Compiler, nur um sicherzustellen, dass Sie APIs verbrauchen, die unterstützt.
Dies ist keine perfekte Lösung, wie einige APIs in Mono werfen NotImplementedExceptions in bestimmten Fällen, so sollten Sie noch testen Ihre Bewerbung mit Mono. Wenn Sie sich für die Portabilität von Anwendungen interessieren, Überprüfen Sie MoMA, den Migrationsanalysator.
Gibt es Gründe, auf Mono zu bauen, anstatt Visual Studio zu verwenden? und Kopieren der Binärdateien?
Im Allgemeinen können Sie weiterhin Visual Studio verwenden, um Ihren Code zu schreiben wenn Sie sich dabei wohl fühlen.
Wenn Sie Linux zum Entwickeln verwenden, werden Sie ermutigt, Ihre Software zu testen Linux häufiger und wenn Sie die Chance haben, wird es auch helfen Sie zu "Dogfood" Ihr eigenes Produkt.
Diese FAQ ist ein bisschen alt (es diskutiert Mono 1.0), aber das obige gilt immer noch in meiner Erfahrung. Es ist immer gut, mit Mono zu kompilieren (oder in MonoDevelop oder Xamarin Studio zu entwickeln), um sicherzustellen, dass Sie keine Microsoft-spezifischen Bibliotheken verwenden.
Zumindest sollten Sie eine Testsuite verwenden, die ohne Visual Studio ausgeführt werden kann (vermeiden Sie also die integrierten Microsoft-Testtools). Auf diese Weise können Sie Ihre Tests auf allen Systemen ausführen, für die Sie die Bereitstellung planen. MonoDevelop wird mit NUnit ausgeliefert, das unter Windows, Linux und OS X läuft.
Einige schnelle, zusätzliche Gedanken:
System.IO.Path.PathSeparator
. System.Environment.NewLine
anstelle von Zeilenvorschub (\ n) und Wagenrücklauf (\ r). Mono, per Design, soll einmal kompiliert und überall ausgeführt werden. Wenn Sie das gleiche Programm unter Windows und Linux kompilieren, sollten sie binäre Entsprechungen sein. Du solltest nichts extra machen müssen.
Lesen Sie die FAQ , insbesondere die zweite Frage: "Ist Mono Binary mit Windows kompatibel?"
>Ja, Mono ist binärkompatibel mit Windows. Was bedeutet, dass Sie können Ausführen von Binärdateien, die von .NET-Compilern von Microsoft und anderen erstellt werden Anbieter.