У меня есть программа, которую я часто использую для .NET. Эта программа имеет небольшую ошибку, которая очень раздражает, и разработчик приложения нигде не найден.Исправить ошибки в .NET-программе без доступа к источнику
Я нашел местоположение проблемы в отражателе и просто хочу добавить здесь один и тот же оператор if, а затем перекомпилировать программу.
Что такое самый простой способ сделать это?
Я попытался использовать функцию экспорта в отражателе, но, похоже, не работает отлично. Например, многие из директив использования отсутствуют, и перечисления, которые перемещаются туда и обратно в int, также не экспортируются должным образом. Я считаю, что могу исправить это с некоторой работой, но мне интересно, есть ли более простой способ сделать это.
Update: решаемые его, делая это:
Программа представляет собой единый исполняемый файл
- Найти ошибку в рефлектор с C# -view. Затем переключитесь на IL-view, чтобы увидеть, что вы должны искать на шаге 5.
- Открыть программу, которую вы хотите изменить, с помощью ildasm
- Нажмите дамп и выберите пустую папку, настройки по умолчанию работали для меня.
- Найдите файл .il в этой папке и открыт с любым текстовым редактором
- Найти код с шага 1.
- заменить его новым код, в моем случае я просто должен был заменить все содержимое функции с простой возврат (IL_0000: ret). Я не думаю, что все исправления будут такими легкими.
- Откройте командную строку в папке с шага 3
- Запустите ilasm, мне также пришлось включить некоторые ресурсы из оригинального exe. Они автоматически выводятся с помощью ildasm. Я использовал этот ILASM как этот "C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ ilasm.exe" test.il /resource=test.res /output=FixedProgram.exe
Done ! Я использовал фиксированную программу только несколько минут, но, похоже, работает так же, как и раньше, за исключением ошибки :)
У меня также возникли проблемы с настройками приложения. В % appdata% \ ProgramName была папка с именем ProgramName.exe_Url_qa5i3p42aomuvoxpuxuficvbmngksgjs, где хранятся все настройки. Мой новый исполняемый файл создал новую папку, подобную этой, с разными случайными буквами в конце и с настройками по умолчанию. Чтобы скопировать настройки, которые вы использовали, просто скопируйте все содержимое старой папки в новую.
Спасибо, что приняли это как ответ Эрик, похоже, это то, что сработало для вас, но для других людей, читающих это, обязательно проверьте Reflexil (http://sebastien.lebreton.free.fr/reflexil/) (как упоминалось в Jb Evain's ответ), так как это позволит вам непосредственно внести изменения в сборку с кодом C#, не беспокоясь об ИЛ, и сохраните исправленную версию сборки, все из рефлектора очень легко. Я настоятельно рекомендую проверить это, это отличный инструмент. –