2012-03-06 19 views
1

私はCILを経由するのではなく、APIアプローチを好むでしょう。私が使用できる高水準のフレームワークはありますか、またはReflection.Emitを使用する必要がありますか?さらに模索して.netバイトコードを生成するためのオプションは何ですか?

UPDATE

私はモノmcs.exe C#コンパイラのバックエンドで使用されるかについての(潜在的に)矛盾する説明があることに気づきました。 Some "Mono C#コンパイラは、System.Reflection.Emit API"を使用してECMA CILイメージを生成します。elsewhere 2011年9月現在、mcsはバイトコード生成用にIKVM.NET implementationを使用していたことが記載されています。

+1

C#があまりにも漠然としたCIL :) –

+0

を生成するための、かなり "高レベルのフレームワーク" です。たぶんhttp://cciast.codeplex.com/ –

+0

細部の不足の謝罪 - 私は不器用なバス旅行で私の電話でそれを素早く書きました。私は、このフレームワークをコンパイラのコード生成バックエンドとして使用する必要があることを示すために、Compilerタグを意味しました。 –

答えて

0

バイトコードは高水準ではありません。高レベルでバイトコードを生成したい場合は、適切な言語で記述し、コンパイラを使用してください:

バイトコードを生成したい場合は、低レベルの定義です。

達成したいのは何ですか? IL放出以外の技術を使用することは可能でしょうか? ILを使用せずに.netでランタイムランタイムを操作する方法はたくさんあります。

+0

IL /バイトコードの出力を支援するために、わずかに高い抽象レベルのヘルパーAPIがあります。私は何年も前にコードプロジェクトに言及されたことを覚えていますが、その名前を思い出すことはできません。それは何年も前に放棄されたかもしれない。 –

2

これは達成しようとしていることに非常に依存します。あなたの特定のシナリオを知らなければ、仕事に適したツールを提案するのは難しいです。

実行時に動的メソッドを生成する必要がある場合は、Reflection.Emitが最適です。あなたのアセンブリを変更する場合はMono.Cecil以上に見てください。これらのすべてのツールでは、.NETメタデータとMSILを理解する必要があります。

しかし、タイプやメソッドの検査や修正などが必要な場合は、PostSharpのようなAOPソリューションを検討することをおすすめします。それはMSILよりはるかに高いレベルでそれらのニーズを表現することができます。

もう一度、それはあなたの使用状況に非常に依存します。

免責事項:私はSharpCraftersで働く、PostSharpのクリエイター

+0

私は、コンパイラのバックエンドコード生成を作成しています。もちろん、テキストILを生成することはできますが、ILを変換するための余分なパスを必要とするのではなく、バイトコードに直接ストリームすることができます。 –

+0

したがって、postsharpや特定の形式のセマンティクスを課すC#ベースのフレームワークのようなILリライタは、おそらく私が必要とするものには適切ではありません。 –

関連する問題