Исключение 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?


person Omer Raviv    schedule 10.06.2012    source источник


Ответы (1)


Для меня это выглядит как ошибка в Сесиле, в том смысле, что Сесил должен прочитать это без сбоя.

Можете ли вы сообщить об ошибке на https://github.com/jbevain/cecil и загрузить куда-нибудь 4.5 System.XML.dll? Тогда я посмотрю и сообщу, является ли это реальной проблемой Сесила или неправильно закодированным пользовательским атрибутом в System.XML.

Обновление:

Это действительно была проблема с Сесилом. Теперь это исправлено в мастере. Вам придется собрать Cecil самостоятельно, пока не будет выпущен новый пакет nuget. Спасибо!

person Jb Evain    schedule 10.06.2012