Порядок атрибутов в дизассемблированном коде
При проверке дизассемблированного кода, который был экспортирован с помощью .NET Reflector, я заметил, что порядок атрибутов на любой заданной сущности не всегда поддерживается.
Я видел это при сравнении дизассемблированного кода двух версий одной и той же сборки (которая видела некоторые незначительные изменения кода между двумя версиями), в классах, которые фактически не изменились между версиями.
Например
[WebBrowsable, Personalizable]
public int SomeProperty ...
Vs
[Personalizable, WebBrowsable]
public int SomeProperty ...
Это довольно неудобно, поскольку это заставляет его выглядеть так, как будто файлы, которые не изменились, изменились.
Что управляет порядком атрибутов в этом сценарии и можно ли что-нибудь сделать для поддержания этого порядка?
2 ответа:
Порядок, в котором атрибуты задаются в таком списке, и порядок, в котором располагаются разделы, присоединенные к одному и тому же объекту программы, не имеет значения. Например, спецификации атрибутов [A][B], [B][A], [A, B] и [B, A] эквивалентны.
Это не совсем говорит о том, что ничего нельзя сделать для поддержания порядка, но это говорит о том, что компилятор не должен обращать внимание на порядок атрибуты и таким образом свободен переупорядочить, как он считает нужным. Если вы хотите гарантировать заказ, вам, вероятно, придется изменить сборку после сборки. Возможно, есть более простой способ решить вашу проблему.