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, 또 다른 한 가지 :'serviceClassBuilder.CreateType()'** 이전에'nested_type_builder.CreateType()'을 호출하지 않으면 ** 예외가 발생하지 않습니다. 내 추측은 그렇다. –
이상하게도, 그것은 나를 위해 예외를 제기했다. – svick