Декомпилировать C# Exe с доступным частичным исходным кодом

Я поддерживаю программу C # на работе, и из-за сбоя жесткого диска я потерял большой кусок кода для уже развернутой версии (что является моей собственной ошибкой из-за того, что я недостаточно часто загружал репозиторий git), и теперь мне нужно внести некоторые изменения в программа. У меня есть исходный код более старой версии программы, и я хочу декомпилировать исполняемый файл и объединить его со старым исходным кодом, чтобы восстановить потерянный код.

Я знаю, что могу декомпилировать с помощью таких инструментов, как рефлектор, но я не хочу объединять его со старым кодом вручную, так как тогда я мог бы просто снова закодировать изменения (около 1-2 дней работы). Возможно ли это или мне нужно пройти дамп кода вручную?


person Morfildur    schedule 11.01.2011    source источник
comment
Я не знаю никаких утилит автоматической декомпиляции, и я думаю, что на самом деле такой утилиты нет. Reflector на сегодняшний день является лучшим инструментом для дизассемблирования/декомпиляции .NET и хорошо справляется со своей задачей...   -  person fardjad    schedule 11.01.2011


Ответы (2)


Я предлагаю вам перекомпилировать старый код и декомпилировать его с помощью рефлектора.

Затем декомпилируйте текущий исполняемый файл с помощью рефлектора и сравните эти два. Таким образом, вы будете видеть только внесенные вами изменения и сможете применить их к своему старому исходному коду, а не просто сравнивать декомпилированный код и исходный код, что, очевидно, приведет к огромному количеству неинтересных различий (комментариев, для одна вещь!).

Я не вижу, как это может быть лучше, если честно. Конечно, это будет ручной процесс, но он все равно сэкономит вам время.

person Jon Skeet    schedule 11.01.2011
comment
Очень хорошее предложение. Я оставлю вопрос на некоторое время, чтобы дождаться других предложений, но я думаю, что приму это позже. - person Morfildur; 11.01.2011
comment
Не обязательно, вы можете использовать патч для применения diff, который полностью автоматический. Конечно, это предполагает, что вы одобряете весь diff, чего он точно не сделает. - person Stefan Steiger; 11.01.2011
comment
У меня только что была идентичная ситуация, и Reflector работал отлично, спасибо! - person Tony; 07.02.2012

Мне пришлось сделать это один раз, я рекомендую Dis#.

Изменить:
Теперь ILSpy намного лучше

person Stefan Steiger    schedule 11.01.2011
comment
Dis #, кажется, не делает больше, чем отражатель, чтобы решить мою проблему, и, поскольку я не могу тратить деньги на проблему, я могу получить только очень ограниченную пробную версию. - person Morfildur; 11.01.2011
comment
Я точно не знаю, на что способен рефлектор, но Dis# может не только создать вам все исходные файлы одновременно (на C#, VB.NET или Delphi.NET), но и создать весь проект Visual Studio и добавляет все ссылки. В прошлый раз, когда я пытался, проект, который я декомпилировал, скомпилировался сразу же... PS: Я сказал вам, что сделаю это для вас (если вы хотите). Если да, просто дайте мне свой адрес электронной почты. - person Stefan Steiger; 11.01.2011