Порядок атрибутов в разобранном коде - PullRequest
3 голосов
/ 06 января 2011

При проверке дизассемблированного кода, экспортированного с использованием .NET Reflector , я заметил, что порядок атрибутов для любой заданной сущности не всегда поддерживается.

Я видел это при сравнении дизассемблированного кода двух версий одной и той же сборки (который видел небольшие изменения кода между двумя версиями) в классах, которые фактически не менялись между версиями.

например

[WebBrowsable, Personalizable]
public int SomeProperty ...

vs

[Personalizable, WebBrowsable]
public int SomeProperty ...

Это довольно неудобно, так как выглядит так, как будто файлы, которые не изменились, имеют.

Что контролирует порядок атрибутов вэтот сценарий, и есть ли что-нибудь, что можно сделать, чтобы поддерживать порядок?

Ответы [ 2 ]

6 голосов
/ 06 января 2011

В соответствии со спецификацией

Порядок, в котором атрибуты указаны в таком списке, и порядок, в котором располагаются секции, прикрепленные к одному и тому же объекту программы, не являютсязначительное.Например, спецификации атрибутов [A] [B], [B] [A], [A, B] и [B, A] эквивалентны.

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

0 голосов
/ 06 января 2011

Порядок атрибутов не влияет на семантику кода и является просто артефактом того, как компилятор C # компилирует проект. Вероятно, это хаотичное поведение в зависимости от того, что еще есть в вашем проекте. К сожалению, с этим ничего не поделаешь ...

...