2012-06-10 17 views
5

Estoy usando Mono.Cecil 0.9.5.3, y después de instalar VS2012 RC (que causa que el .NET 4.0 System.XML.DLL sea reemplazado por su contraparte de .NET 4.5), obtengo una System.ArugmentException en algún código que itera los atributos personalizados de cada método. Parece que la causa es que, en ciertos casos, el argumento ctor del atributo AsyncStateMachine, que debe ser un tipo, está vacío.Mono.Cecil Excepción lanzada al analizar .NET versión 4.5 de System.Xml DLL, ¿por qué?

La siguiente fragmento de código se reproduce:

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 

La excepción desde

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

Mi pregunta es - es esto un error en Mono.Cecil, o la System.XML. ¿DLL? ¿La especificación permite que aparezca un tipo "vacío" como el argumento ctor?

Respuesta

10

Parece un error en Cecil para mí, en el sentido de que Cecil debería leer eso sin estrellarse.

¿Se puede presentar un error en https://github.com/jbevain/cecil y cargar 4.5 System.XML.dll en alguna parte? Echaré un vistazo e informaré si es un problema real de Cecil o un atributo personalizado codificado incorrectamente en System.XML.

actualización:

Era de hecho un problema con Cecil. Ahora está arreglado en master. Tendrá que construir Cecil usted mismo hasta que se libere un nuevo paquete nuget. ¡Gracias!

+0

Hecho, en https://github.com/jbevain/cecil/issues/102 Muchas gracias! –

+0

@OmerRaviv corregido, ¡gracias por archivar este problema! –

Cuestiones relacionadas