2012-10-27 7 views
19

In diesem speziellen Fall muss ich .complicated NET-Anwendung für Linux ausführen. Mit komplizierten ich meine - das Projekt wurde für 3 Jahre entwickelt und ich möchte es nicht wieder in Java oder etwas anderes schreiben und entwickeln und unterstützen beide, .NET und Java-Version später.Wie schreibe ich Programme in C# .NET, um sie unter Linux/Wine/Mono auszuführen?

Anwendung erzeugt Maus- und Tastaturereignisse (durch winapi/dll-Import) und verwendet seriellen Port. Ich habe auch einige Timer für Verzögerungen - für die Kommunikation der seriellen Schnittstelle (10-20ms, brauche ich nicht große Präzision hier).

Der Rest nur viel einfacher Code ist, nichts Besonderes, keine seltsamen Kontrollen, keine directx usw.

Was soll ich erwarten? Ob das funktioniert?

Wenn ein Teil des Codes fehlschlägt - ich kann es ein wenig ändern, Netzwerkverbindung zwischen. NET-Anwendung und Mini-Anwendung auf Linux, die ich für das Senden von Maus und Tastatur Ereignisse oder RS232-Kommunikation schreiben kann.

Zusätzlich möchte ich über Wein und .NET im allgemeinen fragen:

Wie .NET-Anwendungen schreiben, die auf Linux/Wine/Mono laufen soll?

  • welche Version von Framework? (1.x, 2.0 oder kann ich mit 3.5?)
  • Was sollte ich vermeiden

Bearbeiten/von Kommentar bewegt (Importe aus Windows-DLL-Timer?):

I mono sah vor ein paar Jahren, aber es war schrecklich. Jetzt sehe ich, wie es wächst, unterstützt LINQ, Threading und andere komplizierte Funktionen. Außerdem sieht Hilfe jetzt wirklich ernst aus. Ich akzeptiere noch keine Antwort, weil ich sehe, dass Leute immer noch sehr nützliche Links posten. Wenn diese Frage viele +1 bekommt, werde ich sie neu schreiben und vielleicht wird dies anderen helfen.

Ich hoffe, dass hier jemand praktische Erfahrungen mit .NET auf Linux haben hier ...

+1

[Mono] (http://www.mono-project.com/Main_Page) ist eine Open-Source-Implementierung von Microsoft .NET, die Sie wahrscheinlich dafür verwenden könnten. –

+0

Danke. Ich habe das irgendwo gesehen, aber ich habe es vergessen. Trotzdem brauche ich noch ein paar praktische Informationen von jemandem, der etwas entwickelt hat, das in Mono funktioniert. – Kamil

+1

Wenn die Kompatibilität beunruhigend ist, gibt es den [Mono Migration Analyzer] (http://www.mono-project.com/MoMA), der mögliche Probleme anzeigen kann. –

Antwort

17

Haben Sie Mono.NET lesen auf http://www.mono-project.com?

Es ermöglicht Ihnen, .NET-Anwendungen für Linux mit geringen Unterschieden über die Microsoft-Implementierung zu schreiben. Ich glaube nicht, dass Wein mit den .NET-Komponenten zurechtkommt.

Lesen Sie einfach die Dokumentation vor und Sie haben es versucht.

PS: Dies gibt Ihnen auch die Kompatibilitätsliste zwischen Mono und .NET. http://www.mono-project.com/Compatibility und MoMA(mono migration analyzer) ist ein Tool, das alle bereits erstellten .NET-Anwendungen scannt, um festzustellen, ob sie für die Bereitstellung unter Linux kompatibel sind.

+1

Danke. Das ist wahrscheinlich genug für mich, aber krank mit der Annahme warten. Ich sehe, dass Leute immer noch nützliche Links posten. – Kamil

+1

ja, der beste Teil ist, dass es noch weiter portiert, so dass Sie es verwenden können, um Code für Android und iOS auch zu schreiben. – Freeman

4

In diesem Beitrag habe ich alle Informationen, die ich von anderen in diesem Thread gelernt habe, gekürzt und kombiniert.

  1. Open-Source-impementation von .NET für Linux ist Mono genannt.

  2. Kompatibilität ist gut dokumentiert (siehe Links unten). Mono unterstützt LINQ, Threading und einige andere komplizierte Funktionen.

  3. Es unterstützt sogar InteropServices. Es ist möglich, DllImport auf Linux-Bibliothek (!), Wie libc.so zum Beispiel zu verwenden.

  4. Mono kann Android und iOS unterstützt (sie sind Linux-basierte, nicht wahr?)

  5. Es ist ein Werkzeug für Mono-Kompatibilität Analyse MoMA (Mono Migration Analyzer) genannt

Das Mono Migration Analyzer (MoMA) -Tool hilft Ihnen, Probleme zu identifizieren, die Sie bei der Portierung Ihrer .Net-Anwendung auf Mono haben können. Es hilft, plattformspezifische Aufrufe (P/Invoke) und Bereiche, die noch nicht unterstützt durch das Mono-Projekt.

Nützliche Links:

Mono - home page

Mono - page with documentation

Mono - compatibility page

MoMA - Mono Migration Analysis page

3

Wir haben ein paar .ne t Anwendungen, die unter Windows oder Linux mit Mono laufen.

Sie können in VisualStudio entwickeln, wenn Sie möchten, ist es nicht notwendig, die Mono-Entwicklungsumgebung zu verwenden. Zur Ausführung von .net-Anwendungen unter Linux sind nur die Laufzeit-Mono-Bibliotheken erforderlich.

Wir verwenden net 2.0 Ziel, um diese Anwendungen in VisualStudio zu kompilieren, weil Mono fast 100% kompatibel mit .net 2.0 ist. Mono implementiert APIS auch aus späteren .net-Versionen, aber nicht alle und nicht so vollständig. Wenn Sie Funktionen neueren Versionen als 2.0 verwenden, sollten Sie prüfen, ob diese unterstützt werden, oder das Analysetool für die Mono-Kompatibilität verwenden. Sie können auch Mono-Entwicklung anstelle von Visual Studio verwenden, mein Vorgänger tat das; Das Ergebnis ist ziemlich gleich und ich bevorzuge stattdessen Visual Studio.

Wir fanden keine großen Schwierigkeiten, und die Anwendungen sind relativ komplex, stark multithreaded, asynchroner I/O, WinForms, Steckdosen, serielle Ports usw.

Einige App .net-Bibliotheken verwendet, die nicht verfügbar in MS .net, aber alle diese können auch unter Windows installiert werden, so dass es kein Problem gibt, diese Anwendungen in Windows auszuführen.

Hoffnung, die hilft,

1

Sie können C# Anwendungen auf Linux mit .NET-Core entwickeln: https://www.microsoft.com/net/core

Nachdem Sie installieren, geben Sie dotnet new in Ihrem Terminal, um eine Liste von Anwendungsvorlagen, die erzeugt werden können, damit du beginnst.

Ab .NET Core 2.0 heute, das ist die Liste:

Templates           Short Name  Language   Tags    
-------------------------------------------------------------------------------------------------------- 
Console Application        console   [C#], F#, VB  Common/Console  
Class library          classlib   [C#], F#, VB  Common/Library  
Unit Test Project         mstest   [C#], F#, VB  Test/MSTest   
xUnit Test Project        xunit   [C#], F#, VB  Test/xUnit   
ASP.NET Core Empty        web    [C#], F#   Web/Empty   
ASP.NET Core Web App (Model-View-Controller)  mvc    [C#], F#   Web/MVC    
ASP.NET Core Web App        razor   [C#]    Web/MVC/Razor Pages 
ASP.NET Core with Angular       angular   [C#]    Web/MVC/SPA   
ASP.NET Core with React.js      react   [C#]    Web/MVC/SPA   
ASP.NET Core with React.js and Redux    reactredux  [C#]    Web/MVC/SPA   
ASP.NET Core Web API        webapi   [C#], F#   Web/WebAPI   
global.json file         globaljson       Config    
Nuget Config          nugetconfig      Config    
Web Config          webconfig       Config    
Solution File          sln        Solution   
Razor Page          page        Web/ASP.NET   
MVC ViewImports         viewimports      Web/ASP.NET   
MVC ViewStart          viewstart       Web/ASP.NET   

Die aktuelle neueste Version ist 2.0.

Verwandte Themen