Wie wird C # unter Windows programmiert, aber unter Linux? [geschlossen]

8

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?

    
Luke Puplett 04.12.2013, 18:07
quelle

2 Antworten

13

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:

  1. Verwenden Sie das Windows-Pfadtrennzeichen ("\") NICHT als Literal in Ihrem Code. Verwende System.IO.Path.PathSeparator .
  2. Verwenden Sie immer System.Environment.NewLine anstelle von Zeilenvorschub (\ n) und Wagenrücklauf (\ r).
ken 04.12.2013, 18:25
quelle
2

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.

    
Corey Ogburn 04.12.2013 18:09
quelle

Tags und Links