1

我正在尝试使用 Reflexil 更改 Net 4.0 应用程序的 DLL。该目录如下所示:

Main.exe
SomeOther.exe
Lib1.dll
Lib2.dll
Lib3.dll 
...

现在我正在尝试使用 Reflector 7.5.3.8 Trail 和 Reflexil 1.5 更改任何这些文件中的一些 IL 代码。例如,我从 Main.exe 中的 Main() 方法中删除了所有代码(这个 main 方法,我很确定),只留下一个 ret。保存更改后,我仍然看不到任何效果,程序照常启动。

我想问题是,在某处仍然有该文件的缓存版本。我该如何解决这个问题?

我需要做什么来更改 DLL 的 IL 代码?

4

1 回答 1

2

经过几个小时的工作,我终于找到了问题所在。

在安装时,该程序生成了 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 中的其他程序集仍然依赖它。我必须先卸载所有依赖程序集,然后自动删除它。

我希望这会有所帮助。我认为通常区分文件和程序集真的很混乱......

于 2012-05-28T05:59:28.890 回答