2013-02-20 12 views
14

サードパーティのライブラリをに移植することを検討しています。Windows用ストアアプリ。ライブラリは、ILGenerator.Emitメソッドオーバーロードの呼び出しを介してSystem.Reflection.Emit.OpCodesを過度に使用します。Windows用.NETのEmit.OpCodesの目的Store apps API?

Windowsストアアプリ APIについて.NETでは、OpCode構造とOpCodesクラスが含まれていますが、限り私はどちらか全く交換を見つけるしないことができたとして、そこにはILGeneratorクラスがありません、と。

は、私は明らかに何かが足りないのですが、:ILGeneratorクラスせずに、Windowsストアのアプリ APIについて.NETでSystem.Reflection.Emit.OpCodeOpCodesを含むの目的は何ですか?

+3

良い質問ですが、多くの人が答えることはまずありません。私は、内部目的のためにはまだ必要であり、それらを公開するには「害」はない(LocalVariableInfoは利用可能ですが、取得するのに賢明な方法はありません)。 –

+1

@Damien_The_Unbeliever Manyこの問題を詳しく見てくれてありがとう。私は 'Reflection.Emit'名前空間についての経験はほとんどありませんでしたので、私は尋ねると思っていましたが、明らかに' OpCode'と 'OpCodes'だけがなぜ残っているのかはすぐに分かりません:-) –

+1

ILGenerator.Emitについては、Mono - Cecilをご覧ください。私はそれを使用していませんが、他の人はそれを表現木インタープリタとして使用しています:http://www.mono-project.com/Cecil –

答えて

1

良い質問です。

  • ILGenerator
    1. を使用してコードの一部を組み立て:私は確かに言うことはできませんが、私は(と私は本当に想像できない、それが何か他のもののために使われています)その使用オペコード/オペコード考えることができる唯一の理由は2つありますf.exを使用してコードの一部を逆アセンブルします。 MethodInfo.GetMethodBodyを実行して、ILコードを含むバイトを解析します。

    これは前者ではないので、後者を使用していると思います。このためのアプリケーションはスタティックコード分析です。私はそれをf.exで使う。いくつかのMockingビヘイビアを実装し、ラムダ式に渡されたものが何であるかを調べる(この場合は式は使用できません)。このシナリオで可能性の高いコード分析の別のアプリケーションは、特定のクラス/メソッド/構文が使用できないかどうかをチェックすることです(特定の機能を使用したくないと思うかもしれません)。

    +0

    後者はWindowsストアでは利用できません[いずれか](http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.aspx)。 –

    +0

    さて、ILバイトを取得するには複数の方法がありますが、その1つはDLLを何とかアップロードして手動で逆アセンブルすることです。確かに、それはかなり遠くに引っ張られているようです。 – atlaste

    +1

    しかし、ILバイトを取得するためのフレームワークメソッドはすべてブロックされているようです。はい、あなたは手動で逆アセンブルすることができます - そうするつもりなら、OpCodesを自分で定義することができます。 –

    1

    Mono Cecilは、System.Reflectionの機能の一部を置き換えるのに便利ですが、正式にはWinRT用のポートはありませんが、非公式には利用可能なポートがあります。here、Silverlightバージョンに基づいていますモノセシルの

    また、アプリケーションパッケージ外のdllやexeファイルは変更できないことに注意してください。これはWinRTサンドボックスのセキュリティ対策です。

    +0

    ありがとう、@ラファエル、私はそれをもう一度見せます。 –

    関連する問題