Как сделать так, чтобы Reflector не подавился новым синтаксисом - PullRequest
1 голос
/ 22 августа 2010

Есть ли способ заставить рефлектор разобрать обратно на новые конструкции c #?

Автоматически реализуемые свойства выглядят так:

[CompilerGenerated]
private string <TypeName>k__BackingField;
 public string TypeName
 {
     [CompilerGenerated]
     get
      {
         return this.<TypeName>k__BackingField;
      }
      [CompilerGenerated]
      private set
      {
          this.<TypeName>k__BackingField = value;
      }
 }

Универсальные типы со строками или объектами типа Stringsошиблись:

Tuple<User,String><User,string>

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

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

Ответы [ 3 ]

5 голосов
/ 28 августа 2010

Что касается автоматически реализуемых свойств, то они получаются хорошими (то есть как get; set; без сгенерированного компилятором поля поддержки) в последней версии. Просто убедитесь, что вы установили Optimization на .NET 3.5 или .NET 4.0 в View -> Options -> Disassembler.

4 голосов
/ 22 августа 2010

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

Если Reflector сделал предположения о коде, чтобы обнаружить результаты этих синтаксических абстракций, а затем Microsoft изменила компилятор,это было бы сломано снова.Вместо этого Reflector, по-видимому, решил основывать свою декомпиляцию на CLR и языковых спецификациях, которые могут быть изменены без предварительного уведомления.

0 голосов
/ 22 августа 2010

Что ж, очевидно, у Reflector такой функции еще нет. Он даже не догнал C # 3.0, а тем более C # 4.0. Просто дождитесь следующей версии (если она будет).

...