質問

私は私のお気に入りのプログラミングのlangauge NemerleにSilverlightのサポートを追加しようとしています。

Nemerleは、コンパイル手順で、主に2つのステップでの反射を介して、すべてのタイプをロード

1-)のアセンブリをロードするためにAssembly.LoadFromを使用します 2-)Usese Assembly.GetTypes()タイプを取得する

次に、コンパイルの最後にはReflection.Emitで解決タイプを発するます。

この手順では、Silverlightのmscorlib除くSilverlightのものも含めてすべてのアセンブリのために働きます。

C#で、これは失敗します:

 var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");

これは渡します:

var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll"); 

後者、a.GetTypesにおけるBuは()コトのSystem.Objectの親が存在しない例外をスローします。

アウト方法はありますか?

役に立ちましたか?

解決

CLRは、mscorlibの複数のバージョンをロードできませんので、

あなたは、標準のCLRからのSilverlightのmscorlibを超える反映しようとしていると仮定すると、これは動作しません。 (それはそのコアの種類の解像度をひっくり返す可能性があるため、おそらくこれはある)。

この問題を回避するには、種類を検査するMono.Cecilを使用することです: http://mono-project.com/Cecil に。このライブラリは、実際には、.NETの反射よりもパフォーマンスが向上し、より強力なことになってます。

ここでは、始めるためにいくつかのコードです

AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");

var types =
    from ModuleDefinition m in asm.Modules
    from TypeDefinition t in m.Types
    select t.Name;

他のヒント

あなたはSilverlightのアセンブリでNemerleをコンパイルすることができ、その後、あなたはNemerleは、Silverlightの上で作業しています)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top