Анализ кода AssemblyNode.GetType всегда возвращает ноль - PullRequest
0 голосов
/ 11 января 2012

Я пишу пользовательские правила анализа кода для Visual Studio 2010 (в основном FxCop, но самая новая версия).Я пытаюсь получить атрибут (или совокупность всех атрибутов), применяемый к проверяемой сборке, используя код, подобный следующему:

public override ProblemCollection Check( ModuleNode module )
{
    AssemblyNode assembly = module as AssemblyNode;
    if ( assembly != null )
    {
        Identifier ns = Identifier.For( "System.Reflection" );
        Identifier attr = Identifier.For( "AssemblyCopyrightAttribute" );
        TypeNode type = assembly.GetType( ns, attr );         
        ...

... но тип 'всегда равен нулю,даже когда я точно знаю, что такой атрибут определен для сборки.

Более того ... когда я отлаживаю это, я вижу, что коллекция assembly.ModuleAttributes пуста, как и ExportedTypes, как и модули... похоже, что сборка вообще ничего не содержит!Однако «базовый» ModuleNode полностью заполнен и, например, содержит 14 атрибутов в своей коллекции атрибутов.

Как будто «модуль как AssemblyNode» неверен, но если это так, он возвращает ноль!Может кто-нибудь объяснить, что я делаю не так?

1 Ответ

0 голосов
/ 11 января 2012

ModuleNodel.GetType ищет определение типа, а не использует типа. AssemblyCopyrightAttribute определен в сборке mscorlib, которая, вероятно, не соответствует вашему правилу. Чтобы найти использование AssemblyCopyrightAttribute, попробуйте вместо этого использовать assembly.GetAttribute. Для примера см. FxCop: пользовательское правило для проверки значений информации сборки .

...