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

Запуск .NET-приложения в Linux в 2015 году

TL; DR: каковы параметры в настоящее время для запуска решения VS2015 в Linux?


У меня есть приложение .NET, которое отлично работает в Windows и получает запросы на его перенос в Linux. Я очень старался понять, что это значит сегодня в 2015 году, но я действительно путаюсь со всеми старыми сообщениями, указывающими на Mono, и новыми сообщениями, в которых говорится о vNext (и все еще упоминается Mono). Кроме того, у меня неплохой опыт работы с .NET, но я не знаю много о Linux в целом...

Я следил за недавним уроком и смог скомпилировать и запустить консольное приложение Hello World в Linux. Это потребовало некоторой установки вещей, которые я не знаю, включая Mono, а затем запускал некоторые команды "k" (kpm restore, kpm build, k run). Однако теперь я не знаю, как перейти к моему реальному сценарию.

У меня есть решение VS2015, у которого много проектов, но стоит всего 4:  - Общие вопросы  - Сервис  - ServiceWindows/ServiceConsole

Весь код находится в проекте ServiceCore (библиотека классов), который сам имеет ссылку на CommonStuff (другая библиотека классов). ServiceWindows - это проект службы Windows, который просто вызывает основную функцию ServiceCore, а ServiceConsole делает то же самое, что и в консольном приложении (для причин отладки, поскольку отладка проекта службы Windows из Visual Studio невозможна).

Оба CommonStuff и ServiceCore включают в себя множество .NET-библиотек, а также некоторые сторонние DLL файлы. Однако никакого кода для Windows не существует, нет пинвок или фанки.

Если мы рассмотрим ServiceConsole, чтобы стать приложением, которое я хочу запустить на Linux, что мне нужно сделать, чтобы это произошло? Компиляция Hello World была одной вещью, но теперь, со всеми thoese ссылками... Я не знаю, с чего начать. Кроме того, я даже не могу скомпилировать код в Linux (проприетарный код), поэтому мне нужен код для компиляции в Windows, а скомпилированная dll/exe для запуска непосредственно в Linux - это то, что возможно? Я видел несколько сообщений, в которых говорилось, что Mono может запускать скомпилированные приложения, но каждый Mono turorial, который я видел, начинается с компиляции. Также я не уверен, что это vNext. Я читал материал о возможности запуска кода в Linux, если он нацелен на .net 6... но я понятия не имею, как и что это значит.

Я был бы очень признателен, если бы кто-нибудь мог потратить некоторое время, чтобы объяснить в некоторых деталях, какие варианты сейчас и если они реалистичны для профессионального приложения или если это только хорошо для Hello Worlds еще.

Спасибо

EDIT: ОК, похоже, я могу скомпилировать свой код в VS и каким-то образом запустить его в Linux с помощью Mono - как?

4b9b3361

Ответ 1

Я часто разрабатываю многоплатформенные или сложные только Linux-приложения, используя Visual Studio 2015 на окнах. Вы можете просто скомпилировать его в VS, скопировать в linux и запустить - почти всегда это будет работать. Если вы делаете серьезное развитие, вы можете захотеть скомпилировать под моно, чтобы определить некоторые недостающие методы\разные подписи, но это не требуется.

Теперь служба Windows может быть изменена только на консольное приложение. В основном это просто консольное приложение, которое управляется внешним инструментом. В Linux есть различные инструменты, которые позволяют вам управлять (запускать\останавливать\перезапускать при сбое и т.д.) Ваши приложения "службы".

Для веб-приложений я обычно использую ServiceStack, который работает на моно без проблем. Вы даже можете запустить его снова как консольное приложение, за nginx. Вы также можете размещать приложения asp.net под apache\nginx с небольшими изменениями или без изменений кода.

Полгода назад я "портировал" большой проект, который был разработан в течение 2 лет с сервера Windows на сервер CentOS 7, в основном, просто копируя материал в centos и работая (с очень небольшими изменениями, без перекомпиляции под моно). Конечно, у проекта было много сторонних зависимостей, и некоторые разработчики этих зависимостей даже не знали, что существует моно. Тем не менее они просто работали. И это решение имело около 90 проектов VS.

Конечно, не каждый сложный проект настолько легко переносится, особенно если вы часто используете собственные библиотеки, но обычно это не так. Кроме того, если вы работаете с сервером sql, обратите внимание, что драйвер сервера sql в моно очень плохой из моего опыта. Я использую postgre и избегаю sql-сервера с моно, если у меня есть выбор. Работа с изображениями в моно также не очень хороша, багги и нестабильны. Я избегаю использовать класс Bitmap там любой ценой и вместо этого вывожу в imagemagick C api. Но вам нужно делать это только в том случае, если вы делаете серьезную и обширную визуализацию, для основных задач это хорошо.

Короче говоря, запуск .NET-приложения в Linux в 2015 году не является проблемой.