2012-06-10 2 views
5

Mono.Cecil 0.9.5.3을 사용하고 VS2012 RC (.NET 4.0 System.XML.DLL이 .NET 4.5 버전으로 대체 됨)를 설치 한 후 일부 코드에서 System.ArugmentException이 발생합니다. 각 메소드의 사용자 정의 속성을 반복합니다. 어떤 경우에는 Type이어야하는 AsyncStateMachine 속성의 ctor 인수가 비어있는 것으로 나타납니다.System.Xml DLL의 .NET 4.5 버전을 분석 할 때 Mono.Cecil 예외가 throw되는 이유는 무엇입니까?

다음 코드 조각을 재생하기 :

string path = Assembly.Load("System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089").Location; 

AssemblyDefinition systemXmlAssembly = AssemblyDefinition.ReadAssembly(path); 

var query = 

    from ModuleDefinition module in systemXmlAssembly.Modules 
    from TypeDefinition td in module.Types 
    from MethodDefinition method in td.Methods 
    from CustomAttribute att in method.CustomAttributes 
    where method.Name == "System.Xml.IDtdParser.ParseInternalDtdAsync" && 
      att.AttributeType.Name == "AsyncStateMachineAttribute" 
    select att; 

CustomAttribute attribute = query.Single(); 

var args = attribute.ConstructorArguments; // <---- this line throws an ArgumentException 

예외는 내 질문은

Mono.Cecil.ModuleDefinition.CheckFullName(string fullName = "") 

에서 발생합니다 - Mono.Cecil 버그, 또는에서 System.Xml이있다. DLL? 스펙에 "빈"유형이 ctor 인수로 표시 될 수 있습니까?

답변

10

Cecil이 충돌없이 읽을 수 있어야한다는 점에서 Cecil의 버그처럼 보입니다.

https://github.com/jbevain/cecil에서 버그를 신고하고 4.5 System.XML.dll을 어딘가에 업로드 할 수 있습니까? 나는 그때 모양을 가지고 그것이 실제로 Cecil 문제인지 또는 System.XML의 잘못 인코딩 된 사용자 정의 속성인지보고 할 것입니다.

업데이트는 :

그것은 참 세실에 문제가 있었다. 이제 마스터에서 수정되었습니다. 새 너겟 패키지가 출시 될 때까지 Cecil을 직접 만들어야합니다. 감사!

+0

완료 (https://github.com/jbevain/cecil/issues/102) 감사합니다. –

+0

@OmerRaviv이 문제를 해결해 주셔서 고맙습니다! –

관련 문제