.net - .NET/MONO 交叉编译的最佳实践

标签 .net mono

编写可以在 .NET (windows) 和 Mono (linux) 上交叉编译的代码的最佳实践是什么?尽管我对 .NET 非常熟悉,但我对 Mono 及其所有问题的经验并不多。有没有人在这方面看过一篇好的博客文章或最佳实践论文,但我无法挖掘?我会坚持使用 C# 3.0 级别的功能。

我首先关心的是Interop,因为我需要调用一些 native 代码。
接下来是处理诸如 Mono.XXX 之类的 namespace 的最佳方法。我应该使用一堆#if吗?隔离每个平台程序集中的代码?

任何关于建筑和设计的建议将不胜感激!
如果您有在 Visual Studio(任何版本)中为 Linux/Mono 交叉编译的任何经验,我也会对此感兴趣。

最佳答案

最大的问题是坚持使用 Mono 支持的 API。使用 Visual Studio Integration Mono 中的支持对此有很大帮助,因为您可以在所有平台上始终以 Mono 为目标。

对于您的具体问题:

1) 互操作 - 您需要坚持使用 P/Invoke。尝试将其隔离为单独的、特定于平台的程序集。这导致2:

2)使用#if - 我会避免这种情况,并且更喜欢使用可扩展性模型。 Mono 支持 Managed Extensibility Framework ,它提供了一种在运行时“插入”平台特定代码的好方法。

关于.net - .NET/MONO 交叉编译的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1793013/

相关文章:

C# - 编译器错误

.net - 未以管理员身份登录时如何开发.Net服务

c# - 列出/详细说明不同的窗口是否可以同步并数据绑定(bind)到同一个集合?

c# - 将字节数组从 Unity C# 传递到 C++ 库方法

c# - Mono Mkbundle 是否生成 native 代码

c# - 让 gtk# 应用程序在 Windows 上运行的最简单方法

.net - "dotnet restore"命令失败,恢复失败响应不是有效的 NuGet v2 服务响应

java - .NET 运行时与 Java 热点 : Is . NET 落后一代?

.net - 为什么 InvalidEnumArgumentException 在 Silverlight 4 中已过时?

ruby-on-rails - Linux、Rails、Mono C#、No-SQL 设置