Проблема с отражателем и автоматическими свойствами - PullRequest
0 голосов
/ 26 мая 2009

Я только что разобрал проект для его отладки, используя Reflector , но он, похоже, отказывается при декодировании «результатов компиляции» автоматических свойств, например, следующая строка дает мне синтаксическую ошибку. Я пытался исправить это вручную, но каждый раз, когда я исправляю один, появляются новые.

private string <GLDescription>k__BackingField;

Что я могу с этим поделать?

Ответы [ 2 ]

2 голосов
/ 27 мая 2009

Ха! Глупый я: все, что мне нужно было сделать, это установить оптимизацию дизассемблера в настройках Reflector на .NET 3.5. Мой был на 2.0.

2 голосов
/ 26 мая 2009

Компилятор генерирует поля с "невыразимыми именами" - то есть те, которые недопустимы в самом C #, но являются действительными IL.

Нет точного перевода IL в «нормальный» C # (без автоматических свойств). Вы можете заменить < и > на _, что даст юридический код, но тогда, конечно, это не будет точно тот же код больше. Однако, если вам нужна только возможность отладки, это не будет проблемой.

Если вы декомпилируете итераторы (то есть методы, использующие операторы yield), вы найдете больше того же самого, включая использование блоков fault, которые похожи на блоки finally, но они запускаются только при возникновении исключения (но без ловли исключения). Различные другие конструкции также генерируют невыразимые имена, включая анонимные методы, лямбда-выражения и анонимные типы.

В более широком смысле, у вас есть разрешение на декомпиляцию этого кода? Если автор не возражает против того, чтобы вы это делали, они, скорее всего, захотят дать вам исходный код, с которого можно было бы облегчить вашу жизнь. Если они не хотят, чтобы вы начали отладку их исходного кода, вам следует рассмотреть этические (и потенциально юридические) последствия декомпиляции кода. Это может варьироваться в зависимости от местоположения: проконсультируйтесь с настоящим юристом для более точного руководства.

РЕДАКТИРОВАТЬ: Видя ваш собственный ответ, это имеет большой смысл. Я оставлю это здесь для справочного материала.

...