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

时间:2009-11-24 21:23:48

标签: .net mono

编写可以在.NET(Windows)和Mono(linux)上交叉编译的代码的最佳实践是什么?虽然我对.NET非常熟悉,但我对Mono及其所有问题都没有经验。有没有人看过关于这个的好博客文章或最佳实践论文,我还没有能够挖掘出来?我会坚持使用C#3.0级别的功能。

与我有关的事情首先是Interop,因为我需要调用一些本机代码。 接下来是处理名称空间的最佳方法,例如Mono.XXX。我应该使用一堆#if吗?隔离每个平台程序集中的代码?

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

5 个答案:

答案 0 :(得分:7)

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

针对您的具体问题:

1)互操作 - 你需要坚持P / Invoke。尝试将其隔离到单独的平台特定程序集中。这导致2:

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

答案 1 :(得分:3)

你应该被Prebuild

感染

Prebuild是一个跨平台的XML驱动的预构建工具,允许开发人员轻松生成主要IDE和.NET开发工具的项目文件,包括:Visual Studio .NET 2002,2003,2005,SharpDevelop,MonoDevelop ,NAnt和Autotools。

答案 2 :(得分:2)

答案 3 :(得分:2)

Mono项目提供了一个portability guidelines的文档。这是一个非常好的起点。

答案 4 :(得分:0)

我们使用MonoDevelop和Visual Studio进行开发,但关键是要保留一个好的NAnt构建脚本来一次性构建整个事物(Joel Spolsky的规则)。

主要观点IMO要明确指出软件必须是跨平台的,因此它不是“移植到linux / mono”,而是实际开发所需平台上的每次迭代。

我们必须在开始时避免使用某些功能(使用Mono / .NET 5年后才能使用商业产品),我们仍然坚持使用.NET Remoting,但在我看来,这对于多平台开发来说并不是什么大问题

从近一年开始算上软调试器也是一件好事。