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

Kam*_*mil 20 .net c# linux mono wine

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

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

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

我应该期待什么?这会有用吗?

如果代码的某些部分失败 - 我可以稍微更改它,在.net应用程序和linux上的迷你应用程序之间建立网络连接,我可以编写用于发送鼠标和键盘事件或RS232通信.

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

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

  • 哪个版本的框架?(1.x,2.0或者我可以使用3.5吗?)
  • 我该避免什么(从windows dll导入?定时器?)

编辑/移动评论:

几年前我看过单声道,但它太可怕了.现在我看到它长大了,支持LINQ,线程和其他复杂的功能.此外,现在帮助看起来非常严重.我还没有接受回答,因为我看到人们仍然发布非常有用的链接.如果这个问题获得了很多+1,我将重写它,也许这将有助于其他人.

我希望这里有人在linux上有一些.NET实践经验...

Fre*_*man 19

您是否在http://www.mono-project.com上阅读过Mono.NET ?

它允许您为Linux编写.NET应用程序,与Microsoft实现略有不同.我认为wine不会应付任何.NET组件.

只需阅读文档,然后就可以了.

PS:这也为您提供了mono和.NET之间的兼容性列表.http://www.mono-project.com/CompatibilityMoMA(单色迁移分析器)是一个工具,它将扫描已创建的任何.NET应用程序,以查看它是否兼容在Linux上部署.


Kam*_*mil 5

在这篇文章中,我缩短并合并了我在这个帖子中从其他人那里学到的所有信息.

  1. .NET for Linux的开源实现称为Mono.

  2. 兼容性已有详细记录(请参阅下面的链接).Mono支持LINQ,线程和其他一些复杂的功能.

  3. 它甚至支持InteropServices.它可以在linux库(!)使用DllImportlibc.so,例如.

  4. Mono可以支持Android和iOS(它们是基于Linux的,对吧?)

  5. 有一个名为MoMA(Mono Migration Analyzer)的Mono兼容性分析工具

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

有用的链接:

单声道 - 主页

单声道 - 带文档的页面

单声道 - 兼容性页面

MoMA - Mono Migration Analysis页面