Как писать программы на С#.NET, чтобы запускать их в Linux/Wine/Mono?
В этом конкретном случае мне нужно запустить .complicated NET приложение для Linux. Сложным я имею в виду - этот проект был разработан в течение 3 лет, и я не хочу писать его снова в java или что-то еще, и разработайте и поддержите обе версии .NET и Java позже.
Приложение генерирует события мыши и клавиатуры (путем импорта winapi/dll) и использует последовательный порт. У меня также есть несколько таймеров для задержек - для связи через последовательный порт (10-20 мс, мне здесь не нужна большая точность).
Остальное - это просто простой код, ничего особенного, никаких странных элементов управления, нет directx и т.д.
Чего я должен ожидать? Будет ли это работать?
Если какая-то часть кода не удалась - я могу немного ее изменить, сделайте сетевое соединение между .net-приложением и мини-приложением на linux, которое я могу написать для отправки событий мыши и клавиатуры или связи RS232.
Кроме того, я хочу спросить о Wine и .NET в целом:
Как писать приложения .NET, которые должны запускаться в Linux/Wine/Mono?
- какая версия фреймворка? (1.x, 2.0 или я могу использовать 3.5?)
- Чего следует избегать (импорт из dll-dll windows?)
Изменить/переместить из комментария:
Я видел моно несколько лет назад, но это было ужасно. Теперь я вижу, что он вырос, поддерживает LINQ, Threading и другие сложные функции. Кроме того, теперь помощь выглядит очень серьезно. Я еще не принимаю ответ, потому что вижу, что люди все еще публикуют очень полезные ссылки. Если этот вопрос получит много +1, я переписал его, и, возможно, это поможет другим.
Я надеюсь, что у кого-то здесь есть практический опыт работы с .NET на linux здесь...
Ответы
Ответ 1
Вы читали о Mono.NET на http://www.mono-project.com?
Это позволяет вам писать приложения .NET для Linux с незначительными отличиями от реализации Microsoft.
Я не думаю, что вино справится с любым из компонентов .NET.
Просто прочитайте документацию раньше и у вас есть.
PS: Это также дает вам список совместимости между mono и .NET. http://www.mono-project.com/Compatibility и MoMA (mono migration analyzer) - это инструмент, который сканирует любое приложение .NET, уже созданное чтобы узнать, совместимо ли его совместимость с linux.
Ответ 2
В этом посте я сократил и объединил всю информацию, которую я узнал от других в этой теме.
-
Реализация .NET для Linux с открытым исходным кодом называется Mono.
-
Совместимость хорошо документирована (см. Ссылки ниже). Mono поддерживает LINQ, многопоточность и некоторые другие сложные функции.
-
Он даже поддерживает InteropServices. Можно использовать DllImport в библиотеке linux (!), Например, в libc.so
-
Mono может поддерживать Android и iOS (они основаны на Linux, верно?)
-
Существует инструмент для анализа моносовместимости, который называется MoMA (Mono Migration Analyzer).
Инструмент Mono Migration Analyzer (MoMA) помогает вам выявить проблемы, которые могут возникнуть при переносе приложения .Net в Mono. Он помогает точно определять вызовы для конкретной платформы (P/Invoke) и области, которые еще не поддерживаются проектом Mono.
Полезные ссылки:
Mono - домашняя страница
Mono - страница с документацией
Mono - страница совместимости
MoMA - страница анализа моно миграции
Ответ 3
У нас есть несколько приложений .net, которые запускаются в Windows или Linux с помощью Mono.
Вы можете работать в VisualStudio, если хотите, нет необходимости использовать среду разработки Mono. Для запуска приложений .net в Linux требуются только исполняемые моно библиотеки.
Мы используем цель net 2.0 для компиляции этих приложений в VisualStudio, потому что mono почти на 100% совместим с .net 2.0. Mono также реализует APIS из более поздних версий .net, но не все и не так полно. Если вы используете функции более новых версий, чем 2.0, вы должны проверить, поддерживаются ли они или использовать инструмент анализа совместимости Mono. Вы также можете использовать Mono вместо Visual Studio, мой предшественник делает это; результат почти такой же, и я предпочитаю вместо этого использовать Visual Studio.
Мы не обнаружили серьезных проблем, и приложения относительно сложны, сильно многопоточны, асинхронные I/O, WinForms, сокеты, последовательные порты и т.д.
В некоторых приложениях используются библиотеки .net, которые недоступны в MS.net, но все они могут быть установлены и в Windows, поэтому нет никаких проблем для запуска этих приложений в Windows.
Надеюсь, что это поможет,
Ответ 4
Вы можете разрабатывать приложения С# на Linux с .NET Core: https://www.microsoft.com/net/core
После его установки введите dotnet new
в свой терминал, чтобы получить список шаблонов приложений, которые могут быть сгенерированы для запуска.
Начиная с .NET Core 2.0 сегодня это список:
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
Текущая последняя версия 2.0.