编写可以在 .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/