Используя неуправляемый код, как я могу найти тип, которому назначен данный пользовательский атрибут? - PullRequest
0 голосов
/ 07 апреля 2010

Я думал, что смогу перечислять типы, используя IMetaDataImport.EnumTypeDefs и для каждого возвращенного токена вызовите IMetaDataImport.EnumCustomAttributes.

Это работает, поскольку я получаю массив токенов mdCustomAttribute. Используя эти токены, я могу получить токен метаданных, представляющий тип возвращаемого пользовательского атрибута, вызвав IMetaDataImport.GetCustomAttributeProps.

Сравнивая мои результаты с ILDASM, я вижу, что это соответствует "CustomAttribute Type", который сообщает ILDASM. Однако я не могу понять, как определить «CustomAttributeName», о котором сообщает ILDASM. Это то, чего я действительно хочу!

Хотя мне было бы интересно узнать, как получить CustomAttributeName, я бы согласился на альтернативный подход к решению проблемы.

1 Ответ

1 голос
/ 12 апреля 2010

Извините, это был случай RTFM.Атрибут, возвращаемый GetCustomAttributeProps, является не токеном typedef, а токеном mdMethodDef или mdMemberRef.
Для токенов mdMethodDef вы используете IMetaDataImport.GetMethodProps, чтобы найти токен typeDef, а для mdMemberRefs он немного длиннеепуть, но вы начинаете с IMetaDataImport.GetMemberRefProps.

Мораль этой истории - обратить внимание на то, какие токены возвращают эти функции!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...