私は .NET 用のカスタム言語のコンパイラに取り組んできましたが、現在は System.Reflection.Emit を使用していますが、Mono で実行したい場合 (2.0 と 4.0 の両方の CLR の MS .NET で正常に動作します) を実行します。 GenericTypeParameterBuilder を扱うときの例外の束に、最も具体的には次の例外があります。
Unhandled Exception: System.NotSupportedException: The invoked member is not supported in a dynamic module.
at System.Reflection.Emit.TypeBuilder.check_created () [0x00012] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\corlib\System.Reflection.Emit\TypeBuilder.cs:1678
at System.Reflection.Emit.TypeBuilder.InternalResolve () [0x00000] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\corlib\System.Reflection.Emit\TypeBuilder.cs:1653
at System.Reflection.Emit.GenericTypeParameterBuilder.InternalResolve () [0x00000] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\corlib\System.Reflection.Emit\GenericTypeParameterBuilder.cs:93
at System.Reflection.MonoGenericClass.InternalResolve () [0x00021] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\corlib\System.Reflection\MonoGenericClass.cs:105
at System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor (MethodAttributes attributes) [0x00030] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\corlib\System.Reflection.Emit\TypeBuilder.cs:484
at System.Reflection.Emit.TypeBuilder.CreateType () [0x0017f] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\corlib\System.Reflection.Emit\TypeBuilder.cs:788
at dotC.CType.CreateType () [0x00000] in <filename unknown>:0
at dotC.Compiler.Save () [0x00000] in <filename unknown>:0
at dotC.Compiler.Compile () [0x00000] in <filename unknown>:0
at dotC.Dev.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
これを実行するコードはかなり複雑なので、特定のコードをコピーして貼り付けるのは困難ですが、コンパイルしようとしているコード構造は次のようになります。
public class Foo<T> { }
public class Bar<T> : Foo<T> { }
そして、Foo<T> から継承することになっている Bar<T> クラスをコンパイルしようとすると、Foo<T> に提供される汎用パラメーターがバーの T であるときに問題が発生します。
私の質問は、これは Mono SRE の既知の問題ですか? これを回避する方法はありますか? モノか何かの新しいベータ版で修正されていますか?