在Mono和Visual Studio之间共享源代码

3
我希望将我们应用程序的服务器组件从Visual Studio 2008 (.NET 3.5 C#)移植到Linux,并且我认为可以使用Mono,以保持单一代码库。理论上,我们只需要更新VS代码,但是可能存在一些微小而细微的差别,以使它们保持平台功能。有什么提示/教程/应用程序可以帮助我们保持这两个版本的同步?

1
将不同的实现放在它们自己的程序集中,并实现一个公共接口。 - kenny
@kenny,你是指控制反转(IOC)吗?这需要两个独立的代码流,都需要单独维护,不是最佳编码实践。 - johnc
3
在我看来,将差异保持分离是一种良好的编码实践。这比深陷于一堆#if混乱中要好得多。 - kenny
同意 Kenny 的观点 - #IF MONO 很糟糕,这意味着您必须维护不同的配置。 - Michael Shimmins
1个回答

3
你是否有很多不兼容Mono的代码?理想情况下,您希望保持大部分代码相同,并且只需要在少数情况下检查Mono和MS.NET之间的差异。
如果您需要针对Mono和MS.NET使用完全不同的代码,则应使用常见接口的单独实现。例如,我们在应用程序中使用服务总线,可以在MSMQ或ActiveMQ之间切换。我们在Mono发行版中使用ActiveMQ,在MS.NET发行版中使用MSMQ。
你说你需要“移植”你的应用程序到Mono - 这意味着有很多不兼容的代码。如果您广泛使用P/Invoke或其他仅限于Windows的功能,则会更加困难。
我们没有维护Mono版本和MS.Net版本,我们有一个可以编译任何版本的单个代码树。对于具有UI的平台特定程序,我们为每个平台使用单独的UI项目(通常是WPF用于Windows,GTK用于Linux/Mac - 虽然我们开始看MonoMac用于Mac)。除此之外,我们所有的代码都是通用的。在平台之间没有任何需要维护的内容。

实际上,您甚至不需要为Mono编译它:您可以在Linux上使用VS构建,只需加载其他GUI程序集即可。 - skolima
有道理,谢谢,我只是在了解选项。 - johnc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接