Reflection Emitパッケージを使用してクラスを作成する必要が非常に複雑です。このクラスは単純なDTOであり、サービスを定義するためにWCFで使用されます。シンプル、本当に。ただし、はにネストされたタイプを使用する必要があります。Reflection.Emitを使用してネストされた型を作成する方法
私の現在のテストは機能しません。メインの型を作成することはできますが、入れ子型は作成できません。
var serviceClassBuilder = _module.DefineType("something", TypeAttributes.Public | TypeAttributes.Class);
// Create a nested class that will hold the input definition
var nested_type_builder = serviceClassBuilder.DefineNestedType(className,
TypeAttributes.NestedPublic | TypeAttributes.Class |
TypeAttributes.SequentialLayout);
serviceClassBuilder.CreateType(); // <-- NOT WHAT I EXPECTED!
作成されたクラスにはネストされたタイプはありません。出来ますか?クラスは上記のように簡単です。私はEmitパッケージのいくつかの制限を読んだことがありますが、私が使用したような簡単な例には当てはまりません。
私も作成タイプの前に以下の行を追加しようとした:
nested_type_builder.CreateType();
私は最初のビルダーはにCreateTypeのカスケード実行をやるべきだと思うにもかかわらず、すべての後、私が呼び出す必要はありませんがメソッドを作成するもの、型をホストするアセンブリなど
ディスクに保存することはありませんでした。私はそれを試みます。私は実行中に型が必要ですが、これまではdllを保存してからロードすることに問題はありませんでした。 –
Ow、もう1つのこと: 'serviceClassBuilder.CreateType()' **の前に 'nested_type_builder.CreateType()'を呼び出さないと**例外が発生しません。私の推測はすべきです。 –
奇妙なことに、私のために例外が発生しました。 – svick