Reflectorを使用してプロジェクトをデバッグするために逆アセンブルしましたが、自動プロパティの「コンパイル結果」のデコードに失敗しているようです。たとえば、次の行で構文エラーが発生します。これらを手動で修正しようとしましたが、修正するたびに、さらに表示されます。
private string <GLDescription>k__BackingField;
これについて私にできることはありますか?
Reflectorを使用してプロジェクトをデバッグするために逆アセンブルしましたが、自動プロパティの「コンパイル結果」のデコードに失敗しているようです。たとえば、次の行で構文エラーが発生します。これらを手動で修正しようとしましたが、修正するたびに、さらに表示されます。
private string <GLDescription>k__BackingField;
これについて私にできることはありますか?
コンパイラは、「言いようのない名前」のフィールドを生成します。つまり、C# 自体では違法ですが、有効な IL であるフィールドです。
IL を「通常の」C# (自動プロパティなし) に正確に変換することはできません。<
and>
をwhich に置き換えると_
、正当なコードが得られますが、もちろん、まったく同じコードにはなりません。ただし、デバッグ機能のみを必要とする場合は、問題にはなりません。
イテレータ (つまり、yield
ステートメントを使用するメソッド) を逆コンパイルすると、ブロックの使用を含め、同じことがさらに見つかります。ブロックはfault
ブロックに似finally
ていますが、例外が発生した場合にのみ実行されます (ただし、例外をキャッチしません)。匿名メソッド、ラムダ式、匿名型など、他のさまざまな構造体も言葉では言い表せない名前を生成します。
より広い意味で、このコードを逆コンパイルする許可はありますか? 作成者がそうすることを気にしないのであれば、作業を楽にするソース コードを喜んで提供してくれるでしょう。最初からソース コードをデバッグすることを彼らが望まない場合は、コードを逆コンパイルすることによる倫理的 (および潜在的に合法的な) 影響を考慮する必要があります。これは場所によって異なる場合があります。より明確なガイダンスについては、実際の弁護士に相談してください。
編集:あなた自身の答えを見たので、それは非常に理にかなっています。これは背景資料としてここに残しておきます。
ハ!愚かな私: 私がしなければならなかったのは、Reflector のオプションで逆アセンブラーの最適化を .NET 3.5 に設定することだけでした。私のは2.0でした。