7

お気に入りのプログラミング言語NemerleにSilverlightサポートを追加しようとしています。タイプリフレクションを使用してmscorlib 2.0.5.0(別名Silverlight mscorlib)のタイプを取得しますか?

を取得する

コンパイル手順にNemerle、主に2つの段階

1-反射を介してすべてのタイプをロードする)アセンブリ 2-ロードするAssembly.LoadFromを使用する)Usese Assembly.GetTypes()

コンパイルの終わりに、Reflection.Emitで解決された型を出します。

この手順は、Silverlightのmscorlib以外のSilverlightを含むすべてのアセンブリで機能します。

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

をこれは通過:

C#でこれが失敗した後者で

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

Buは、a.GetTypes()例外をスローコトのSystem.Objectの親が存在しません。

出口がありますか?

+0

あなたは、Silverlight自体やからこれをやっています標準のCLR? –

答えて

5

標準のCLRからSilverlightのmscorlibを認識しようとしていると仮定すると、CLRでは複数のバージョンのmscorlibを読み込むことができないため、これは機能しません。 (おそらく、これはコアタイプの解決を脅かす可能性があるからです)。

回避方法は、Mono.Cecilを使用してタイプを検査することです。 http://mono-project.com/Cecil。このライブラリは実際には.NETのReflectionよりも優れたパフォーマンスを発揮し、より強力になるはずです。

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

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

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

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

関連する問題