Исключение Mono.Cecil возникает при анализе версии .NET 4.5 DLL System.Xml. Почему?

Я использую Mono.Cecil 0.9.5.3, и после установки VS2012 RC (что приводит к замене .NET 4.0 System.XML.DLL на аналог .NET 4.5) я получаю сообщение System .ArugmentException в некотором коде, который повторяет пользовательские атрибуты каждого метода. Похоже, причина в том, что в некоторых случаях аргумент ctor атрибута AsyncStateMachine, который должен быть типом, пуст.

Следующий фрагмент кода воспроизводит это:

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?

5
задан Omer Raviv 10 June 2012 в 13:11
поделиться