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?
Hecho, en https://github.com/jbevain/cecil/issues/102 Muchas gracias! –
@OmerRaviv corregido, ¡gracias por archivar este problema! –