如何用C#.NET编写程序,在Linux / Wine / Mono上运行它们?

在这种特殊情况下,我需要为Linux运行复杂的.NET应用程序。 复杂的我的意思是 – 这个项目开发了3年,我不想再写在Java或其他东西,开发和支持,以后的.NET和Java版本。

应用程序正在生成鼠标和键盘事件(通过winapi / dll导入)并使用串行端口。 我也有几个计时器延迟 – 串口通信(10-20ms,我不需要很大的精度)。

其余的只是很多简单的代码,没有什么特别的,没有奇怪的控制,没有directx等

我应该期待什么? 这会工作吗?

如果代码的某些部分会失败 – 我可以稍微改变一下,在.net应用程序和Linux上的迷你应用程序之间build立networking连接,我可以编写发送鼠标和键盘事件或RS232通信。

另外我想问一下Wine和.NET:

如何编写应该在Linux / Wine / Mono上运行的.NET应用程序?

  • 哪个版本的框架? (1.x,2.0还是可以使用3.5?)
  • 我应该避免(从Windows dll?定时器导入?)

编辑/从评论移动:

几年前我看到了单声道,但是很糟糕。 现在我看到它成长起来,支持LINQ,线程和其他复杂的function。 另外现在的帮助看起来非常严重。 我还没有接受答案,因为我看到人们仍然张贴非常有用的链接。 如果这个问题得到很多+1,我会重写它,也许这会帮助别人。

我希望这里的人有一些Linux上的.NET的实践经验…

Solutions Collecting From Web of "如何用C#.NET编写程序,在Linux / Wine / Mono上运行它们?"

你有没有在http://www.mono-project.com上阅读Mono.NET?

它使您可以编写.NET应用程序,而在Microsoft实施方面有微小的差异。 我不认为葡萄酒会应付任何.NET组件。

只是阅读文件之前,你有一个去。

PS:这也给你单声道和.NET之间的兼容性列表。 http://www.mono-project.com/Compatibility和MoMA(单一迁移分析器)是一个工具,它将扫描已经创建的任何.NET应用程序,看它是否兼容在Linux上部署。

在这篇文章中,我缩短了将本人从其他人那里学到的所有信息。

  1. .NET for Linux的开放源代码被称为Mono

  2. 兼容性很好(参见下面的链接)。 单声道支持LINQ,线程和一些其他复杂的功能。

  3. 它甚至支持InteropServices。 它可能在Linux库 (!) 使用DllImport ,例如libc.so

  4. 单声道可以支持Android和iOS (它们是基于Linux的,对吗?)

  5. Mono兼容性分析有一个工具叫做MoMA(Mono Migration Analyzer)

Mono Migration Analyzer(MoMA)工具可帮助您识别将.Net应用程序移植到Mono时可能遇到的问题。 它有助于查明特定于平台的调用(P / Invoke)以及Mono项目尚不支持的区域。

有用的链接:

单声道 – 主页

单文档 – 包含文档的页面

单声道兼容性页面

MoMA – 单一迁移分析页面

我们有几个运行在Windows或Linux上的.net应用程序。

如果你愿意,你可以在VisualStudio中开发,没有必要使用Mono开发环境。 只有运行时单声道库才能在Linux上运行.net应用程序。

我们使用net 2.0目标在VisualStudio中编译这些应用程序,因为mono与.net 2.0几乎100%兼容。 Mono也从后来的.net版本实现APIS,但不是全部,也不完整。 如果您使用的功能比2.0版本更新,则应检查是否支持这些功能或使用Mono兼容性分析工具。 你也可以用Mono开发而不是Visual Studio,我的前任是这么做的; 结果几乎相同,我宁愿使用Visual Studio来代替。

我们没有发现任何重大的麻烦,应用程序相对复杂,大量多线程,异步I / O,WinForms,套接字,串行端口等。

有些应用程序使用的.net库在MS .net中不可用,但所有这些都可以安装在Windows上,以便在Windows中运行这些应用程序没有任何问题。

希望有所帮助,

您可以使用.NET Core在Linux上开发C#应用程序: https : //www.microsoft.com/net/core

安装完成后,在终端中输入“newnet”,即可获取可供您启动的应用程序模板列表。

从今天的.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,涵盖了我所有的需求。