Изменения сборки с Reflexil не имеют никакого эффекта
Я пытаюсь изменить DLL приложения Net 4.0 с Reflexil. Каталог выглядит так:
Main.exe
SomeOther.exe
Lib1.dll
Lib2.dll
Lib3.dll
...
Теперь я пытаюсь изменить код IL в любом из этих файлов с помощью Reflector 7.5.3.8 Trail и Reflexil 1.5. Например, я удаляю весь код из метода Main() в Main.exe (основной метод, я уверен в этом), не оставляя ничего, кроме ret. После сохранения изменений эффекта пока не вижу, программа запускается как обычно.
Я предполагаю, что проблема в том, что где-то еще есть кэшированная версия этого файла. Как мне решить эту проблему?
Что мне нужно сделать, чтобы изменить код IL библиотек DLL?
1 ответ
После многих часов работы я наконец нашел проблему.
При установке программа генерировала NativeImages - пока ничего необычного. Проблема была в том, что
ngen uninstall Lib1.dll
или же
ngen uninstall Main.exe
не удалить родное изображение. Зачем? Я понятия не имел... я пытался
ngen display Lib1.dll
и он сказал, что нет такой сборки. По стечению обстоятельств я попытался перечислить весь Native Image Cache с помощью поиска:
ngen display | find "Lib1"
который показал мне, что он все еще там (почему это?!). На этот раз я попытался удалить его, не удаляя Lib1.dll, а выполнив
ngen uninstall Lib1 (without dll)
который работал как шарм и сказал мне проблему. Он не удалил его, потому что другие сборки в Native Image Cache все еще зависели от него. Сначала мне пришлось удалить все зависимые сборки, после чего он был удален автоматически.
Я надеюсь, что это поможет. Я думаю, что это действительно сбивает с толку, чтобы отличить файл от сборки в целом...