.NET Reflector и проблема получения / установки - PullRequest
4 голосов
/ 11 июня 2010

Я использую современный .NET Reflector для дизассемблирования внутреннего унаследованного приложения, исходный код которого практически невозможно восстановить. Мне нужно найти причину неприятной ошибки, а затем, возможно, исправить ее. Reflector, как обычно, проделал хорошую работу по воссозданию структуры проекта, но вскоре я обнаружил, что некоторые вызовы свойства * * * * * * * * * * * * * * были расширены до его сигнатур методов * get_() и * set_(), что делает исходный код невозможно скомпилировать.

Сначала я думал, что каждый вызов get / set имеет проблему. Но при ближайшем рассмотрении некоторые из них в порядке, а другие (особенно свойства OleDbCommand и Forms.Control) будут сгенерированы как get_() и set_().

.

Быстрый Visual Studio "Поиск / Замена" с помощью регулярных выражений разрешил эти случаи, но это неудобно. Есть ли способ заставить Reflector вести себя правильно ?

РЕДАКТИРОВАТЬ 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 - Сборка была построена в режиме выпуска.

Ответы [ 3 ]

0 голосов
/ 11 июня 2010

Эта проблема возникает при разборке на Managed C ++, верно?Возможно, потребуется разобрать код C # (в панели инструментов есть выпадающий список), и вы получите обычные свойства.

0 голосов
/ 08 апреля 2011

Таким образом, даже если этот вопрос довольно старый и правильный ответ никогда не будет достигнут, теперь вы можете дать новому инструменту в блоке ILSpy шанс.

Может быть, он получит лучший исходный код из коробки.

0 голосов
/ 11 июня 2010

Где вы просматриваете исходный код в Reflector?В текущей версии (6.1.0.11 на момент написания этой статьи) дизассемблирование типа с последующим нажатием «Расширить методы» внизу приводит к полному определению класса с кодом, включая правильный синтаксис свойства (get { ... } и set { ... })

...