有什么比从C#移植到Java更好的选择?

时间:2011-04-16 23:15:32

标签: java .net porting code-reuse

6 个答案:

答案 0 :(得分:2)

在决定实施之前,花更多时间确定要求。在您知道需要什么之前,您没有任何选择设计的标准。

如果它是非Windows环境,那么将.NET放在任何地方是没有意义的。例如。

答案 1 :(得分:2)

如果你需要在Java虚拟机上运行但看起来很像C#的东西,你应该看看Stab。这对P / Invoke等没有帮助,但您可能会发现将C#代码移植到Java并维护它的工作量较少。

你应该调查Mono。我希望你的所有C#代码都可以不加修改地运行(触摸非托管DLL的部分除外)。

我没有使用它,但jni4net应该允许从Java调用.NET代码。如果您的客户想要Java接口,这可能是一个解决方案。

我一直在Linux和Mac上使用Mono,即使.NET兼容性不是优先考虑的事情。我喜欢C#和.NET库,更喜欢CLR到JVM。 Mono是MIT / X11许可,这意味着如果您愿意,可以在商业上使用它。与其他一些人不同,我认为没有理由避免微软支持的技术,同时支持Oracle和IBM所倡导的技术。

使用Mono无法帮助您处理非托管位,尽管您仍然可以P / Invoke到本机DLL中。您只需自己移植该DLL或找到一些等效的。

您可能还想查看Mono Ahead of Time compilation

答案 2 :(得分:1)

你考虑过单声道吗?它很可能会支持非Windows环境中的现有代码。诀窍是从java调用它,但是单声道的人也可能有一些东西可以帮助你。

答案 3 :(得分:1)

在您的情况下,这可能不是正确的解决方案,但为了完整性:

有一些语言可以同时针对JVM和.NET,特别是Ruby(JRuby和IronRuby)和Python(Jython和IronPython)。 Scala最终可能也会到达那里,尽管现在.NET版本远远落后于JVM版本。

无论如何,您可能会在Ruby或Python中重写您的库,并以两个运行时为目标。

答案 4 :(得分:1)

如果你真正想要的是能够在.NET中编码并让它在JVM上运行,你可以check out Grasshopper(2015-09:链接可能已经死了)。这就是它的目的。

我知道Mainsoft多年来一直是Mono的贡献者。如果我没记错的话,他们为Mono编写了Visual Basic编译器。

还有C# to Java converter from Tangible。我听说过好东西,但我自己从未使用过它。

此外,它对你的情况没有多大帮助,但我应该指出Mono for Android

Android版Mono并行运行CLR和Dalvik VM。换句话说,您为Android编写的C#代码可以调用Java库(例如Android UI)并作为单个应用程序执行。您曾询问过在同一进程中运行.NET和Java代码的能力。显然,它可以做到。

答案 5 :(得分:0)

  

我考虑过的一件事是将大部分核心TCP / IP功能重新编写成更多跨平台(C / C ++)的东西,然后将我的.NET库更改为一个薄层。 (P / Invoke?),然后在它上面写一个类似的瘦Java层(JNI?)。

这是可能的。在Java方面,您应该考虑使用JNA而不是JNI。 (如果使用JNI,则需要编写C / C ++代码以使用特定于JNI的签名。)

另一种可能性是将专有二进制协议替换为“只适用于”多种编程语言的东西。这是CORBA和类似技术提供良好解决方案的问题空间。