2011-01-06 3 views
3

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

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

например.

[WebBrowsable, Personalizable] 
public int SomeProperty ... 

против

[Personalizable, WebBrowsable] 
public int SomeProperty ... 

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

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

+2

Да, больно. Немного ошибки в рефлекторе в моей книге. Нелегко обойти обход, отправить электронное письмо Redgate. –

+0

@ Ханс: Согласен. Я отправил по электронной почте Redgate, сообщит, если я услышу что-нибудь интересное. –

ответ

6

согласно specification

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

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

+0

Не могли бы вы обновить сообщение со ссылкой на эту часть спецификации? –

+1

Джейсон был быстрее, но у меня есть ссылка: P http://msdn.microsoft.com/en-us/library/aa664616(v=vs.71).aspx –

+0

@Richard Ev: это §17.2 спецификации. – jason

0

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

+0

Согласился, что порядок атрибутов не влияет на функциональность кода, он просто замедляет мои разные действия. –