Comment écrire des programmes en C# .NET, de les exécuter sur Linux/Wine/Mono?
Dans ce cas particulier, j'ai besoin de courir .compliqué NET application pour Linux. Par compliqué je veux dire - que le projet a été développé pendant 3 ans et je ne veux pas écrire de nouveau en java ou autre chose, et de développer et de soutenir à la fois, .NET et Java version ultérieure.
Application est de générer de la souris et du clavier des événements (en winapi/importation dll) et utilise le port série. J'ai aussi quelques minuteries pour les retards - pour le port de communication série (de 10 à 20ms, je n'ai pas besoin de grande précision ici).
Le reste est juste un tas de code simple, rien de spécial, pas bizarre de contrôles, pas de directx etc.
Que dois-je attendre? Ce travail sera?
Si une partie du code ne pourra pas - je peux changer un peu, rendre le réseau de connexion entre les deux .net application et de la mini-application sur linux que je peux écrire pour l'envoi de la souris et du clavier événements, ou de communication RS232.
En outre, je voudrais vous interroger sur la Vin et .NET en général:
Comment écrire .NET applications qui doivent s'exécuter sur Linux/Wine/Mono?
- la version de cadre? (1.x, 2.0 ou puis-je utiliser 3.5?)
- que devrais-je éviter (les importations de dll de windows? minuteries?)
Modifier/déplacé de commentaire:
J'ai vu mono quelques années, mais c'était terrible. Maintenant je vois qu'il growed jusqu'à, prend en charge LINQ, le Filetage et d'autres conditions difficiles. En plus maintenant aider a l'air vraiment sérieux. Im n'acceptant pas encore de réponse, parce que je vois que les gens continue d'afficher de très liens utiles. Si cette question reçoit beaucoup de +1 je vais le réécrire et peut-être que cela aidera d'autres personnes.
J'espère que quelqu'un ici ont une certaine expérience pratique .NET sur linux ici...
- Mono est une implémentation open source de Microsoft .NET que vous pourriez probablement utiliser pour cela.
- Merci. J'ai vu cela quelque part, mais je l'ai oublié. De toute façon j'ai encore besoin de quelques informations pratiques de quelqu'un qui a développé quelque chose qui fonctionne en Mono.
- Si c'est la compatibilité qui est inquiétant, il y a le Mono Migration de l'Analyseur qui peut montrer les problèmes potentiels.
- Grand merci @Cthulhu. Très utile lien.
- Mono ne sera pas adapté si vous utilisez pInvokes pour accéder à la fonctionnalité au sein de Win32 - ce sera tout simplement hors échouer sur linux.
- mais il mentionne la solution pour que, dans sa propre question. Il peut diviser le programme en deux parties, l'indépendant de la plateforme .NET une partie de la CIB à un composant natif qui est utilisée sur la base de la plate-forme, il est exécuté. Enfait il peut encore utiliser P/Invoke, il a juste besoin d'utiliser une classe pour windows et pour Linux
Vous devez vous connecter pour publier un commentaire.
Avez-vous lu à propos de Mono.NET sur http://www.mono-project.com?
Il vous permet de vous écrire .NET applications pour Linux, avec des différences mineures au cours de la mise en œuvre de Microsoft.
Je ne pense pas que le vin va faire face à toute de la .Composants NET.
Il suffit de lire la documentation avant et que vous avez un go.
PS: Cela vous donne également la liste de compatibilité entre mono et .NET. http://www.mono-project.com/Compatibility et Le MoMA(mono migration de l'analyseur) est un outil qui va scanner tout .NET application déjà créé, pour voir si il est compatible pour déployer sur linux.
Dans ce post, je raccourcie et combinée de toutes les informations que j'ai appris à partir d'autres dans ce fil.
Open source impementation de .NET pour Linux est appelé Mono.
Compatibilité est bien documentée (voir les liens ci-dessous). Mono prend en charge LINQ, de filetage et de certaines autres conditions difficiles.
Il prend même en charge InteropServices. Il est possible d'utiliser DllImport sur linux bibliothèque (!), comme
libc.so
par exemple.Mono support Android et iOS (ils sont basés sur Linux, non?)
Il y a un outil pour la compatibilité Mono analyse appelé le MoMA (Mono Migration de l'Analyseur)
Liens utiles:
Mono - page d'accueil
Mono - page avec de la documentation
Compatibilité Mono page
MoMA - Mono Analyse de Migration page
Nous avons un couple de .net applications qui s'exécutent sur Windows ou Linux avec Mono.
Vous pouvez développer dans VisualStudio si vous le souhaitez, il n'est pas nécessaire d'utiliser le Mono environnement de développement. Seul le runtime mono bibliothèques sont nécessaires pour exécuter la commande .net applications sur Linux.
Nous utilisons net 2.0 cible de compiler ces applications dans VisualStudio, parce que mono est de presque 100% compatible avec .net 2.0. Mono met également en œuvre l'API à partir plus tard .net versions, mais pas tous et pas aussi complet. Si vous utilisez les fonctionnalités des versions plus récentes que le 2.0, vous devez vérifier si ceux-ci sont pris en charge ou de l'utilisation de la compatibilité Mono outil d'analyse. Vous pouvez également utiliser Mono développer au lieu de Visual Studio, mon prédécesseur était en train de faire; le résultat est à peu près la même, et je préfère utiliser Visual Studio à la place.
Nous n'avons trouvé aucune difficulté majeure, et les applications sont relativement complexes, fortement multithread, des e/S asynchrone, WinForms, les sockets, les ports série, etc.
Certaines application utilisée .net bibliothèques qui ne sont pas disponibles dans MS .net, mais tous ces peut être installé sur Windows en tant que bien de sorte qu'il n'y a pas de problème pour exécuter ces applications sur Windows.
Espère que ça aide,
Vous pouvez développer des applications C# sous linux avec .NET de Base: https://www.microsoft.com/net/core
Après son installation, le type de
dotnet new
dans votre terminal pour obtenir une liste des modèles d'application qui peut être généré pour vous de commencer.Comme de .NET Core 2.0 aujourd'hui, c'est la liste:
L'actuelle version 2.0.