4

最新の .NET Reflector を使用して、ソース コードを復元することがほとんど不可能な内部レガシー アプリを逆アセンブルしています。厄介なバグの原因を見つけて、パッチを当てる必要があります。Reflector は、プロジェクトの構造を再作成する際にいつものようにうまく機能しましたが、すぐに、一部のget_()プロパティ呼び出しがそのおよびset_()メソッド シグネチャに「拡張」されたままになっており、ソース コードをコンパイルできないことがわかりました。

最初は、すべての get/set 呼び出しに問題があると思っていました。しかし、よく見ると、それらのいくつかは問題ありませんが、他のもの (特に OleDbCommand および Forms.Control プロパティ) は および として生成されget_()ますset_()

これらのケースは、Visual Studio の正規表現を使った簡単な「検索/置換」で解決できましたが、扱いにくいものです。Reflectorを正しく動作させる方法はありますか?

EDIT 1 - 以下の問題のあるコードの例:

/* Generated by .NET Reflector 6.1.0.11 */
/* The variable selectCommand is a OleDbCommand. */
string parameterName = "@P" + Convert.ToString(num);
selectCommand.set_CommandText(selectCommand.get_CommandText() + " WHERE SIGLA = " + parameterName);
/*
   Expected something like this (as ugly as it may seem):
   selectCommand.CommandText = selectCommand.CommandText + " WHERE SIGLA = " + parameterName;
*/

編集 2 - アセンブリはリリース モードでビルドされました。

4

3 に答える 3

0

したがって、この質問がかなり古く、正解が得られない場合でも、ブロックILSpyの新しいツールにチャンスを与えることができます。

おそらく、すぐに使用できる優れたソース コードが生成されるでしょう。

于 2011-04-08T12:22:04.623 に答える
0

この問題は、Managed C++ への逆アセンブルで発生しますよね? C# コード (ツールストリップにドロップダウンがあります) に逆アセンブルすると、通常のプロパティが得られます。

于 2010-06-11T18:39:14.617 に答える
0

Reflector のソース コードはどこで表示されますか? 現在のバージョン (この記事の執筆時点では 6.1.0.11) では、型を逆アセンブルし、下部にある [メソッドの展開] をクリックすると、正しいプロパティ構文 (get { ... }およびset { ... })を含むコード付きの完全なクラス定義が生成されます。

于 2010-06-11T18:38:22.373 に答える