在这种特殊情况下,我需要为Linux运行.complicated .NET应用程序。复杂的我的意思是 - 该项目开发了3年,我不想再用java或者它来编写它其他东西,并在以后开发和支持.NET和Java版本。
应用程序正在生成鼠标和键盘事件(通过winapi / dll导入)并使用串行端口。我也有很少的延迟定时器 - 用于串口通信(10-20ms,我不需要大的精度)。
其余的只是很多简单的代码,没什么特别的,没有奇怪的控件,没有directx等。
我应该期待什么?这有用吗?
如果代码的某些部分失败 - 我可以稍微更改一下,在.net应用程序和linux上的迷你应用程序之间建立网络连接,我可以编写它来发送鼠标和键盘事件,或RS232通信。
此外,我想问一下Wine和.NET:
如何编写应在Linux / Wine / Mono上运行的.NET应用程序?
编辑/移动评论
几年前我看过单声道,但它太可怕了。现在我看到它长大了,支持LINQ,线程和其他复杂的功能。此外,现在帮助看起来非常严重。我还没有接受回答,因为我看到人们仍然发布非常有用的链接。如果这个问题得到很多+1,我会重写它,也许这会对其他人有所帮助。我希望这里有人在linux上有一些.NET实践经验......
答案 0 :(得分:18)
您是否在http://www.mono-project.com上了解了Mono.NET?
它允许您为Linux编写.NET应用程序,与Microsoft实现略有不同。 我认为wine不会应付任何.NET组件。
之前只需阅读文档,即可开始使用。
PS:这也为您提供了mono和.NET之间的兼容性列表。 http://www.mono-project.com/Compatibility和MoMA(mono migration analyzer)是一个工具,可以扫描已创建的任何.NET应用,以查看它是否兼容在Linux上部署。
答案 1 :(得分:5)
在这篇文章中,我缩短并综合了我在这个帖子中从别人那里学到的所有信息。
.NET for Linux的开源实现称为 Mono 。
兼容性已有详细记录(请参阅下面的链接)。 Mono支持LINQ,线程和其他一些复杂的功能。
它甚至支持InteropServices。可以在linux库上使用 DllImport (!),例如libc.so
。
Mono可以支持 Android和iOS (它们是基于Linux的,对吧?)
有一个名为MoMA(Mono Migration Analyzer)的 Mono兼容性分析工具
Mono Migration Analyzer(MoMA)工具可帮助您识别问题 将.Net应用程序移植到Mono时可能有。它有助于精确定位 特定于平台的调用(P / Invoke)和尚未调用的区域 由Mono项目支持。
有用的链接:
答案 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中完美地工作。
致谢