web-dev-qa-db-fra.com

Comment écrire des programmes en C # .NET, pour les exécuter sur Linux / Wine / Mono?

Dans ce cas particulier, je dois exécuter l'application NET .complicated pour Linux. Par compliqué, je veux dire - ce projet a été développé pendant 3 ans et je ne veux pas l'écrire à nouveau en Java ou autre chose et développer et prendre en charge à la fois .NET et Java plus tard.

L'application génère des événements de souris et de clavier (par importation winapi/dll) et utilise le port série. J'ai également peu de temporisateurs pour les retards - pour la communication par port série (10-20 ms, je n'ai pas besoin d'une grande précision ici).

Le reste est juste beaucoup de code simple, rien de spécial, pas de contrôles étranges, pas de directx etc.

À quoi dois-je m'attendre? Est-ce que ça va marcher?

Si une partie du code échoue - je peux le changer un peu, établissez une connexion réseau entre l'application .net et la mini-application sur linux que je peux écrire pour envoyer des événements de souris et de clavier, ou une communication RS232.

De plus, je veux poser des questions sur Wine et .NET en général:

Comment écrire des applications .NET qui devraient fonctionner sur Linux/Wine/Mono?

  • quelle version du framework? (1.x, 2.0 ou puis-je utiliser 3.5?)
  • que dois-je éviter (importations à partir de dll Windows? minuteries?)

Modifier/déplacé du commentaire:

J'ai vu du mono il y a quelques années, mais c'était terrible. Maintenant, je le vois grandi, prend en charge LINQ, Threading et d'autres fonctionnalités compliquées. De plus, maintenant l'aide semble vraiment sérieuse. Je n'accepte pas encore de réponse, car je vois que les gens affichent toujours des liens très utiles. Si cette question obtient plusieurs +1, je vais la réécrire et cela aidera peut-être les autres.

J'espère que quelqu'un ici aura une expérience pratique avec .NET sur linux ici ...

21
Kamil

Avez-vous lu sur Mono.NET sur http://www.mono-project.com ?

Il vous permet d'écrire des applications .NET pour Linux avec des différences mineures par rapport à l'implémentation Microsoft. Je ne pense pas que Wine supportera les composants .NET.

Il suffit de lire la documentation avant et c'est parti.

PS: Cela vous donne également la liste de compatibilité entre mono et .NET. http://www.mono-project.com/Compatibility et MoMA (analyseur de migration mono) est un outil qui analysera toute application .NET déjà créée pour voir si son compatible à déployer sur linux.

19
Freeman

Dans ce post, j'ai raccourci et combiné toutes les informations que j'ai apprises des autres dans ce fil.

  1. L'implémentation open source de .NET pour Linux est appelée Mono .

  2. La compatibilité est bien documentée (voir les liens ci-dessous). Mono prend en charge LINQ, le filetage et certaines autres fonctionnalités compliquées.

  3. Il prend même en charge InteropServices. Il est possible d'utiliser DllImport sur la bibliothèque linux (!), Comme libc.so par exemple.

  4. Mono peut prendre en charge Android et iOS (ils sont basés sur Linux, non?)

  5. Il existe un outil d'analyse de compatibilité mono appelé MoMA (Mono Migration Analyzer)

L'outil Mono Migration Analyzer (MoMA) vous aide à identifier les problèmes que vous pouvez rencontrer lors du portage de votre application .Net vers Mono. Il aide à localiser les appels spécifiques à la plateforme (P/Invoke) et les zones qui ne sont pas encore prises en charge par le projet Mono.

Liens utiles:

Mono - page d'accueil

Mono - page avec documentation

Mono - page de compatibilité

MoMA - page d'analyse de migration mono

5
Kamil

Nous avons quelques applications .net qui fonctionnent sur Windows ou Linux avec Mono.

Vous pouvez développer dans VisualStudio si vous le souhaitez, il n'est pas nécessaire d'utiliser l'environnement de développement Mono. Seules les bibliothèques mono d'exécution sont requises pour exécuter les applications .net sous Linux.

Nous utilisons la cible net 2.0 pour compiler ces applications dans VisualStudio, car mono est presque 100% compatible avec .net 2.0. Mono implémente également APIS à partir de versions ultérieures de .net, mais pas toutes et pas aussi complètes. Si vous utilisez des fonctionnalités de versions plus récentes que 2.0, vous devez vérifier si elles sont prises en charge ou utiliser l'outil d'analyse de compatibilité mono. Vous pouvez également utiliser Mono develop au lieu de Visual Studio, mon prédécesseur le faisait; le résultat est à peu près le même, et je préfère utiliser Visual Studio à la place.

Nous n'avons trouvé aucun problème majeur, et les applications sont relativement complexes, fortement multithread, E/S asynchrones, WinForms, sockets, ports série, etc.

Certaines applications ont utilisé des bibliothèques .net qui ne sont pas disponibles dans MS .net, mais toutes celles-ci peuvent également être installées sur Windows afin qu'il n'y ait aucun problème pour exécuter ces applications dans Windows.

J'espère que cela pourra aider,

3
JM Catena

Vous pouvez développer des applications C # sur Linux avec .NET Core: https://www.Microsoft.com/net/core

Après l'avoir installé, tapez dotnet new dans votre terminal pour obtenir une liste de modèles d'application pouvant être générés pour que vous puissiez commencer.

À partir de .NET Core 2.0 aujourd'hui, voici la 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        

La dernière version actuelle est 2.0.

2
Tadej