Подтвердить что ты не робот

Как писать программы на С#.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 здесь...

4b9b3361

Ответ 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

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

  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 - страница анализа моно миграции

Ответ 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.