在 Linux 中的 Mono 下,在 Visual Studio / msbuild 中编译的二进制文件是不是 100% 兼容?

Posted

技术标签:

【中文标题】在 Linux 中的 Mono 下,在 Visual Studio / msbuild 中编译的二进制文件是不是 100% 兼容?【英文标题】:Are binaries compiled in Visual Studio / msbuild 100% compatible under Mono in Linux?在 Linux 中的 Mono 下,在 Visual Studio / msbuild 中编译的二进制文件是否 100% 兼容? 【发布时间】:2020-12-13 15:22:08 【问题描述】:

在 Windows 操作系统上使用 Visual Studio 或 msbuild 编译的二进制文件是否 100% 兼容在 Linux 中的 Mono 下运行?例如,我可以在 Visual Studio 或 Windows 上的 msbuild 中编译二进制文件,然后将其打包以在 Linux 上使用,还是我需要在 Linux 操作系统上使用 mono 构建二进制文件以确保完全兼容?

具体来说,我需要知道在 Visual Studio 2019 中生成的二进制文件在使用 Mono 5.10 的 Linux 下是否 100% 兼容

【问题讨论】:

Mono 上没有“完全兼容性”。请迁移到 .NET Core。 假设您在两个平台上使用相同的“支持的框架”并且没有 P/Invoke'ing 本机 Windows 功能,那么可以。但是 .Net Core 将在 2021 年取代 Mono,如果开始新的开发,你真的应该迁移新的。 【参考方案1】:

在许多情况下,您在 Windows 上构建的二进制文件在 Mono 或 Linux 上的 .NET Core 下运行良好。尽管 .NET Core 会更加完整,但许多接口都可以在两者上运行。

但是,唯一确定的方法是测试。即使您生成了完美的二进制文件并且 Mono 支持每个调用的 API,您仍然可能使用其中带有反斜杠的路径,这是 Linux 不支持的。除非您使用所需的解释器在 Linux 上运行测试套件,否则您不会知道这一点。这就是合适的 CI 设置可以提供帮助的地方,因为它可以让您自动运行大部分测试。

【讨论】:

谢谢@bk2204 我能澄清一下吗在Windows等上运行?在我看来,前者是更合适的方法。 如果你想在 Linux 上运行它,我肯定会说你应该在 Linux 上构建(和测试)它。如果可以的话,这几乎总是更安全的选择。

以上是关于在 Linux 中的 Mono 下,在 Visual Studio / msbuild 中编译的二进制文件是不是 100% 兼容?的主要内容,如果未能解决你的问题,请参考以下文章

C#console应用程序可以在没有Mono的Linux下运行吗?

linux下jexus+mono安装

Linux / Mono上的VS编码UI测试

C#在Linux+Mono环境中使用微信支付证书

如何在不阻塞的情况下从 Spring Webflux 中的 Mono 对象中提取数据?

Linux下面跑.NET程序