我知道 C#,我喜欢在系统之间切换并使用 Linux。我可以使用 C# 来构建可以在 Linux 上原生运行的应用程序吗?我应该怎么做才能在 Linux 系统中利用我的 C# 知识?
请注意,我专攻 Unity3D,但我仍想使用 C# 创建 Linux 应用程序。
我知道 C#,我喜欢在系统之间切换并使用 Linux。我可以使用 C# 来构建可以在 Linux 上原生运行的应用程序吗?我应该怎么做才能在 Linux 系统中利用我的 C# 知识?
请注意,我专攻 Unity3D,但我仍想使用 C# 创建 Linux 应用程序。
是的,您可以在 Ubuntu 上开发软件,该软件本身将在 Ubuntu 上运行,使用 C#。Mono和.NET Core都支持GNU/Linux系统,例如 Ubuntu。(您也可以在其他发行版上使用它们,例如 Debian、Raspbian、Fedora、CentOS、Arch、Gentoo 等。)您可能知道,Unity3D 游戏引擎还支持 Ubuntu。Unity3D嵌入 Mono。
许多用于 Ubuntu 的软件包,可使用 Ubuntu 的软件包管理器从官方社区支持的软件源安装,是用 C# 编写并使用 Mono。这包括音乐播放器Banshee、笔记应用程序Tomboy、光栅图形编辑器Pinta和密码管理器KeePass(从第 2 版开始)。
大多数文本编辑器,例如 Gedit、Vim 和 Emacs,都有 C# 的语法高亮。MonoDevelop和Visual Studio Code是在 Ubuntu 上运行并支持 C# 开发的两个流行的集成开发环境。
您很可能会偶然发现http://www.mono-project.com/
正如关于 Mono页面所说:
支持的平台包括 Linux。
所以,是的。C# 知识在当今的 Linux 系统上非常有用。
您现在甚至可以使用 .Net Core 和一个名为 Avalonia 的新项目来开发基于 XAML 的前端跨平台(Linux、Mac、Windows、Android、iOS、UWP)应用程序。Avalonia 处于测试阶段,但现在运行良好。它类似于 WPF,但对样式进行了一些类似 CSS 的增强。
我相信 Linux Avalonia 目前以 Gtk 为目标,但他们想要转向其他东西。这段视频中提到过,但我个人听不懂他说什么: https ://www.youtube.com/watch?v=WESJUJWBLJ0
Linux 以 C 编程语言提供其本机 API。原生 Linux 程序使用这些 API 来访问文件、I/O 设备、套接字(网络)、进程间通信、线程等。要创建原生 Linux 应用程序,您可以用 C 编写应用程序,然后使用(大多数可能)GCC 最终得到一个可执行文件。您甚至可以更进一步,在您的程序中使用 GUI 库来添加 GUI(GTK 和 Qt 是两个流行的)或使用打包系统来打包您的应用程序(如 .deb 和 .rpm 文件)。
C#、F# 和 VB 自带编译器(通常生成 IL 代码而不是机器代码),而不是直接使用 Windows 或 Linux 本机 API(均使用 C 语言),它们有自己的包装器。这意味着在编译的代码和操作系统之间需要有另一个额外的层。这个额外的层必须读取 IL 代码并将其转换为本地 Windows 或 Linux 或 macOS API。这个额外的层可以是 .NET Framework、Mono 或 .NET Core(目前只是 .NET)。
现在回答“C# 可用于 Linux 系统编程吗?”这个问题,在大多数情况下是的。
.NET 具有用于文件处理、网络、线程和一些 I/O 设备的库。例如,假设您需要在您的应用程序中访问蓝牙。.NET 没有任何蓝牙 API,因此在这种情况下,您有两种选择:
其他示例包括 WiFi Direct、游戏手柄、CPU 温度、电池信息、摄像头、GPS、笔记本电脑传感器等。因此,对于低级应用程序,您只能靠自己(即使在 Windows 上也是如此,除非您使用 UWP) . 对于 Linux 上的此类应用程序,C 或 Python 将是更好的选择。
如果您想将 GUI 添加到您的应用程序,.NET 有 GUI 库,但仅适用于 Windows。另一方面,Mono 具有 GTK 的绑定,称为 GTK#,但 GTK# 自然总是落后于 GTK 开发(除非您想要最新的功能,否则这不是问题)。
.NET 6 为跨平台 GUI 提供了另一种解决方案。在 .NET 6 中,您可以使用 C#、HTML 和 CSS 创建一个 Blazor 应用程序,并使用 Electron 从中创建一个桌面应用程序(在撰写本文时,它还没有准备好)。
总结一下:
Linux 上 C# 的优点
Linux 上 C# 的缺点