2012-09-14 51 views
2

可以使用monodroid编译Android设备上的C#代码吗? 我想在我的Android平板电脑上运行C#代码,monodroid看起来像是可能的解决方案,但是如果monodroid编译器只能在Windows/Mac或Android上运行,我没有发现任何提示。即时编译C#

回答

7

我本来打算张贴此作为克里斯·辛克莱的答案评论,但想通这是要结束了足够长的时间,它也可以被一个单独的答案。

我写C#去了,所以我可以提供一些评论那里。它实际上是使用Mono for Android编写的。然而,说Mono for Android做了从C#到Java的转换或编译是不正确的。应用程序中的C#代码运行在Mono运行时间之上,可调用接口用于在运行时间之间来回交谈(有关更多详细信息,请参见this answer)。

回来时,我第一次发布C#去年常去我写了a blog post描述我是如何把它放在一起。基本上,我正在使用Mono的C#编译器服务版本,该服务针对Mono for Android配置文件编译。该应用程序的所有来源也是available on GitHub

,因为有一些问题,目前执行(其中一些是在博客中详细介绍)这不是一个完美的解决方案。目前,由于Mono运行时存在问题,我无法支持在应用中创建/编译类。这是已记录的问题,已在更高版本的Mono中修复,但由于Mono for Android仍然基于Mono 2.10,因此尚未得到这些修复。我的理解是,今年晚些时候,Xamarin将开始致力于将Mono for Android(以及MonoTouch)带到Mono 2.12,这也应该带来这些修复,再加上C#编译器服务,避免将它带入其中与我一样,作为一个单独的图书馆。

1

编辑:见格雷格镣铐的意见,他进一步进入处理和纠正我的误解。

有一个Android应用程序C# To Go它确实和我以前使用它。我不能肯定地说,如果作者使用Mono for Android(不会感到惊讶)。也许你可以联系该应用的作者。 然而,据我所知,Android的Mono预先编译DLL并将它们转换成Java或以某种方式在打包/部署之前将它们连接到Java接口。我不知道是否在平台上的运行时通过编译器生成程序集会生成可加载的可用程序集。

除此之外,我还知道,在运行时发出IL(而不是编译DLL)的伪代码生成器的工作,因为我使用它们。特别是,我在Mono上为Android安装了一个C#端口FLEE (Fast Lightweight Expression Evaluator)。也许这样的东西可以满足您的需求。

最后,调查Mono自己的编译CodeDOM功能。据我所知,它具有更好的运行时代码编译器服务(类似于C#5将带给我们的);也许它也适用于Android的Mono。

+1

Mono for Android不会将C#预编译为Java,因此该部分不正确。我是C#to Go的作者,所以我刚刚发布了一个答案,以便对应用程序进行一些深入的了解。 –

+0

感谢@GregShackles的洞察力,以及C#To Go的出色工作! –