5

Mono.Cecil 0.9.5.3 を使用しています。VS2012 RC をインストールした後 (.NET 4.0 System.XML.DLL が .NET 4.5 の対応するものに置き換えられます)、反復するコードで System.ArugmentException が発生します。各メソッドのカスタム属性。原因は、場合によってはAsyncStateMachine、Type であるはずの属性の ctor 引数が空であることです。

次のコードはそれを再現します。

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 引数として表示できますか?

4

1 に答える 1

10

Cecil がクラッシュせずにそれを読み取る必要があるという意味で、私には Cecil のバグのように見えます。

https://github.com/jbevain/cecilでバグを報告し、4.5 System.XML.dll をどこかにアップロードできますか? それでは様子を見て、それが実際の Cecil の問題なのか、それとも System.XML で間違ってエンコードされたカスタム属性なのかを報告します。

更新

それは確かにセシルの問題でした。現在、マスターで修正されています。新しい nuget パッケージがリリースされるまで、Cecil を自分でビルドする必要があります。ありがとう!

于 2012-06-10T14:15:34.180 に答える