1

リフレクターを新しい 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 ints またはオブジェクトを持つジェネリック型は正しくありません:

Tuple<User,String><User,string>

いくつかのラムダベースのコードに応答して生成される紛らわしい列挙子は言うまでもありません。

何か案は?元の形式に戻ることは素晴らしいことですが、同等のコンパイル可能な状態に到達することは大きな前進です。上記の例は有効な C# コードではありません。

4

3 に答える 3

5

自動実装されたプロパティに関してはget; set;、最新バージョンでは問題なく (つまり、コンパイラによって生成されたバッキング フィールドがない場合と同様に) 表示されます。またはに設定Optimizationしていることを確認してください。.NET 3.5.NET 4.0View -> Options -> Disassembler

于 2010-08-28T09:46:26.110 に答える
4

すべてが双方向の翻訳というわけではありません。ラムダ式、反復子、自動実装プロパティなどは、実際のコードにコンパイルされる C# のシンタックス シュガーです。このコンパイルされたコードを取得して、元のコードがどのように見えるかを判断できるとは限りません。

Reflector がこれらの構文の抽象化の結果を検出するためにコードについて仮定を行い、Microsoft がコンパイラを変更した場合、それは再び壊れます。その代わりに、Reflector は、事前の通知なしに変更される可能性が低い CLR および言語仕様に基づいて逆コンパイルすることを選択しているようです。

于 2010-08-21T22:26:35.637 に答える
-3

もちろん、Reflector にはまだその機能がありません。C# 3.0 にはまだ追いついておらず、ましてや C# 4.0 には追いついていません。次のバージョンを待つだけです (ある場合)。

于 2010-08-21T22:10:15.457 に答える