我想知道是否有自动将F#代码转换为在实践中运行良好的C#代码。这样做的原因是我们在F#中有一些逻辑,我们希望使用Mono for Android,MonocMac,MonoTouch ......为每个平台创建一个应用程序。由于那些不直接支持F#,如果我们可以继续编写F#中的逻辑并使用C#和那些工具执行GUI部分,那将是很好的。
任何人都知道什么?感谢。
答案 0 :(得分:6)
为什么需要翻译代码?编译的托管二进制文件应该与Mono一起使用。只需将其添加到项目中即可。
您可以使用像ILSpy这样的工具将您的代码反编译成另一种语言,但这并没有太大的改变 - 这就是将不同语言编译成.NET CIL的全部要点。
答案 1 :(得分:5)
任何支持F#和C#的.NET反编译都可以做到。
例如: Cecil.Decompiler和ILSpy。
Steve Gilham有一篇很好的文章,关于使用Cecil.Decompiler和ILSpy以及其他一些关于F#和C#代码之间互操作性的博客文章将F#反编译为C#。这些文章可能对您有所帮助。
通常情况下,当我想知道在F#代码下发生了什么时,我只使用ILSpy
,这在反编译为C#时会更明确。将F#代码编译成一个单独的dll并在C#代码中使用它是最好的方法。
答案 2 :(得分:4)
理论上,您应该能够在MonoTouch和Mono for Android上运行F#代码。在实践中......事情变得更加复杂。 : - )
MonoTouch和Mono for Android提供了自己的基类库,这些库与桌面.NET不兼容(它们主要是Silverlight的超集)。为了让您的F#代码在MonoTouch和Mono for Android下运行,您必须首先针对相应的程序集编译F#代码。
此外,您需要删除FSharp.Core.dll
上的所有依赖项(即使可能吗?)或端口FSharp.Core.dll
,以便它可以针对等效的MonoTouch和Mono for Android程序集执行。我确信这是可能的,但我不知道它是否已经完成或者它有多容易。
删除或完成FSharp.Core.dll
及相关依赖项后,您应该只需将所有必需的程序集(F#程序集和依赖项)添加到项目中并运行。
答案 3 :(得分:4)
刚刚通过F#发现了这些博客帖子以及所有Mono家伙:MonoTouch & F# P I和MonoTouch & F# P II
答案 4 :(得分:3)
只需使用--standalone(属性|构建|其他标志| --standalone)编译您的F#库,它就会将FSharp.Core.dll合并到您的库中。