2014-11-01 2 views
1

Reflection.Emit 대신 Mono.Cecil을 사용하도록 컴파일러를 변환 한 후 peverify에서 오류가 발생합니다.Peverify ClassLayout에 부모 TypeDef가 AutoLayout으로 표시되어 있습니다.

Microsoft (R) .NET Framework PE Verifier. Version 4.0.30319.33440 
Copyright (c) Microsoft Corporation. All rights reserved. 

[MD]: Error: ClassLayout has parent TypeDef token=0x02000002 marked AutoLayout. [token:0x00000001] 
1 Error(s) Verifying test.exe 

나는 이것이 무엇을 의미하는지에 대한 정보를 찾을 수 없었습니다. 필요한 경우 실행 파일을 제공 할 수 있습니다.

+0

두 방법 모두를 사용하여 코드 해독을 살펴 보았습니까? 그 차이점은 무엇입니까? 또한 위의 오류를 일으키는 어셈블리를 생성하는 최소한의 샘플 코드를 제공 할 수 있습니까? – svick

답변

2

유효성 오류의 의미에 대해서만 설명 할 수 있으며 제공된 정보로 인한 원인을 이론화 할 수 없습니다. 이것은 생성 한 어셈블리의 메타 데이터에있는 버그입니다. 특히, Ecma-335의 ClassLayout 표, II.22.8 절. 기본 오류 코드는 VLDTR_E_CL_TDAUTO, 0x80131229입니다. "ClassLayout 상위 TypeDef는 AutoLayout으로 표시됩니다."

ClassLayout 테이블에는 명시 적 레이아웃으로 선언 된 유형에 대한 레코드가 들어 있습니다. C#에서 [StructLayout (LayoutKind.Explicit)] 또는 [StructLayout (LayoutKind.Sequential)] 특성이 적용된 유형 LayoutKind.Auto는 속성이없는 클래스의 기본값입니다. 유효성 검사기는 ClassLayout 테이블의 레코드를 두 번 검사하여 TypeDef 테이블의 해당 레코드와 일치시킵니다. 당신은 규칙 # 3을 위반 : SequentialLayout 또는 ExplicitLayout (§II.23.1.15)한다 부모에 의해 색인

클래스 또는 치형. 즉, AutoLayout 유형은 ClassLayout 테이블의 행을 소유하지 않아야합니다. [오류]

+0

빈 구조체에 자동 레이아웃을 사용할 수 없다는 것이 문제인 것처럼 보입니다. 목록에있는 표를 보는 방법에 대한 정보를 추가 할 수 있습니까? – MI3Guy

관련 문제