1

Android デバイスで C# コードをコンパイルするために monodroid を使用できますか? Android タブレットで C# コードをオンザフライで実行したいのですが、モノドロイドは可能な解決策のように見えますが、モノドロイド コンパイラが Windows/Mac または Android でのみ実行できるかどうかについての通知は見つかりませんでした。

4

2 に答える 2

7

私はもともとこれをChris Sinclairの回答へのコメントとして投稿するつもりでしたが、それは別の回答になる可能性があるほど長くなるだろうと考えました.

私は C# to Go を作成したので、そこで解説を提供できます。実際、Mono for Android を使用して作成されています。ただし、Mono for Android が C# から Java への変換またはコンパイルを行うというのは正しくありません。アプリケーション内の C# コードは Mono ランタイム上で実行され、呼び出し可能なインターフェイスを使用してランタイム間でやり取りします (詳細については、この回答を参照してください)。

昨年、初めて C# to Go をリリースしたとき、私はそれをどのようにまとめたかを説明するブログ記事を書きました。基本的に、Mono for Android プロファイルに対してコンパイルした Mono の C# コンパイラ サービスのバージョンを使用しています。アプリのすべてのソースもGitHub で入手できます

現在の実装にはいくつかの問題があるため、これは完全な解決策ではありません (一部はブログ投稿で詳しく説明されています)。現在、Mono ランタイムの問題により、アプリでのクラスの作成/コンパイルをサポートできません。これは文書化された問題であり、Mono の以降のバージョンで修正されていますが、Android 用の Mono はまだ Mono 2.10 に基づいているため、修正されていません。私の理解では、今年後半に Xamarin が Mono for Android (および MonoTouch) を Mono 2.12 に移行する作業を開始し、これらの修正に加えて、C# コンパイラ サービスがすぐに同梱されているため、それを持ち込む必要がなくなります。私が行ったように、別のライブラリとして。

于 2012-09-17T13:06:29.807 に答える
1

編集: Greg Shackles がプロセスをさらに進め、私の誤解を訂正する際のコメントを参照してください。

まさにそれを行う Android アプリC# To Goがあり、私は以前にそれを使用しました。著者が Android 用の Mono を使用したかどうかは、はっきりとは言えません (驚くことではありません)。おそらく、そのアプリの作成者に連絡できます。ただし、私が理解しているように、Mono for Android は DLL をプリコンパイルして Java に変換するか、パッケージ化/展開する前に何らかの方法で Java インターフェイスに接続します。プラットフォームでの実行時にコンパイラを介してアセンブリを生成すると、すぐに使用できるアセンブリが生成され、それを読み込むことができるかどうかはわかりません。

さらに、(DLL をコンパイルするのではなく) 実行時に IL を生成する疑似コード ジェネレーターが、私が使用しているとおりに機能することを知っています。具体的には、 Mono for AndroidでFLEE (Fast Lightweight Expression Evaluator)の C# ポートを使用しています。おそらく、そのようなもので十分です。

最後に、Mono 独自のコンパイル CodeDOM 機能について調べます。私の理解では、実行時のコード コンパイラ サービスが改善されています (C# 5 がもたらすものと同様です)。おそらく、Mono for Android でも利用できるでしょう。

于 2012-09-14T10:28:26.103 に答える