Как писать программы на C# .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?)
  • Чего следует избегать (импорт из Windows DLL? таймеры?)

Редактировать / перенести из комментария:

Я видел моно несколько лет назад, но это было ужасно. Теперь я вижу, что он вырос, поддерживает LINQ, Threading и другие сложные функции. Кроме того, теперь помощь выглядит действительно серьезной. Я пока не принимаю ответ, потому что я вижу, что люди все еще публикуют очень полезные ссылки. Если этот вопрос получит много +1, я перепишу его, и, возможно, это поможет другим.

Я надеюсь, что кто-то здесь имеет некоторый практический опыт работы с.NET на Linux здесь...

4 ответа

Решение

Вы читали о Mono.NET на http://www.mono-project.com/?

Это позволяет вам писать приложения.NET для Linux с небольшими отличиями по сравнению с реализацией Microsoft. Я не думаю, что Wine справится ни с одним из компонентов.NET.

Просто прочитайте документацию раньше и у вас все получится.

PS: это также дает вам список совместимости между моно и.NET. http://www.mono-project.com/Compatibility и MoMA(анализатор миграции mono) - это инструмент, который сканирует любое приложение.NET, уже созданное, чтобы определить его совместимость для развертывания в linux.

В этом посте я сократил и объединил всю информацию, которую я узнал от других в этой теме.

  1. Реализация.NET для Linux с открытым исходным кодом называется Mono.

  2. Совместимость хорошо документирована (см. Ссылки ниже). Mono поддерживает LINQ, многопоточность и некоторые другие сложные функции.

  3. Он даже поддерживает InteropServices. Можно использовать DllImport в библиотеке linux (!), Например libc.so например.

  4. Mono может поддерживать Android и iOS (они основаны на Linux, верно?)

  5. Существует инструмент для анализа моносовместимости, который называется MoMA (Mono Migration Analyzer).

Инструмент Mono Migration Analyzer (MoMA) помогает вам определить проблемы, которые могут возникнуть при переносе приложения.Net в Mono. Это помогает точно определять вызовы для конкретной платформы (P/Invoke) и области, которые еще не поддерживаются проектом Mono.

Полезные ссылки:

Mono - домашняя страница

Mono - страница с документацией

Mono - страница совместимости

MoMA - страница анализа моно миграции

У нас есть пара приложений.net, которые работают на Windows или Linux с Mono.

Вы можете разрабатывать в VisualStudio, если хотите, нет необходимости использовать среду разработки Mono. Для запуска приложений.net в Linux требуются только моно-библиотеки времени выполнения.

Мы используем цель net 2.0 для компиляции этих приложений в VisualStudio, потому что mono почти на 100% совместим с.net 2.0. Mono также реализует APIS из более поздних версий.net, но не все и не так полно. Если вы используете функции более новых версий, чем 2.0, вам следует проверить, поддерживаются ли они, или использовать инструмент анализа совместимости Mono. Вы также можете использовать Mono development вместо Visual Studio, мой предшественник делал это; результат почти такой же, и я предпочитаю использовать Visual Studio вместо этого.

Мы не обнаружили никаких серьезных проблем, и приложения являются относительно сложными, сильно многопоточными, с асинхронным вводом-выводом, WinForms, сокетами, последовательными портами и т. Д.

Некоторые приложения использовали библиотеки.net, которые недоступны в MS .net, но все они также могут быть установлены в Windows, чтобы не было проблем с запуском этих приложений в Windows.

Надеюсь, это поможет,

Вы можете разрабатывать приложения на C# для 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.

Вы можете установить полную версию.Net Framework 4.x в Wine с помощью winetricks, а затем запустить приложение.

Wine поддерживает последовательные порты, поэтому неудобств не вижу.

Я сделал видео, показывающее это:

https://www.youtube.com/watch?v=60yyWBLXv1k

На видео вы можете увидеть панель задач Windows. Не беспокойся об этом. Это потому, что он работает в WSL2. Но эти шаги отлично работают в Linux.

С уважением

Другие вопросы по тегам