Я использую 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?