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

时间:2012-10-27 19:19:19

标签: c# .net 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实践经验......

5 个答案:

答案 0 :(得分:18)

您是否在http://www.mono-project.com上了解了Mono.NET?

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

之前只需阅读文档,即可开始使用。

PS:这也为您提供了mono和.NET之间的兼容性列表。 http://www.mono-project.com/CompatibilityMoMA(mono migration analyzer)是一个工具,可以扫描已创建的任何.NET应用,以查看它是否兼容在Linux上部署。

答案 1 :(得分:5)

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

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

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

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

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

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

  6.   

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

    有用的链接:

    Mono - home page

    Mono - page with documentation

    Mono - compatibility page

    MoMA - Mono Migration Analysis page

答案 2 :(得分:3)

我们有几个在Windows或Linux上使用Mono运行的.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,套接字,串行端口等。

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

希望有所帮助,

答案 3 :(得分:1)

您可以使用.NET Core在Linux上开发C#应用程序: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。

答案 4 :(得分:0)

您可以使用winetricks在wine中安装完整的.Net Framework 4.x,然后运行您的应用程序。

Wine支持串行端口,因此不会给您带来任何不便。

我拍了一段视频,显示了这一点:

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

在视频中,您可以看到Windows任务栏。不用担心这是因为它在WSL2中运行。但是这些步骤在Linux中完美地工作。

致谢