好的,所以我有一个应用程序,我一直负责编辑源代码不可用,由于机密性,我无法共享应用程序/代码 - 我意识到这使得这些问题具有挑战性,但是因为我在此之前做了这个相信这是我想要的简单事情。
我以前执行过此操作,唯一的区别是这是一个使用4.5和最新C#编译器等的新版本。
以下是该方案:
我可以打开应用程序,正确阅读并编辑IL。事实上,我可以在反射桌面(最新),Telerik(我通常的使用)中使用reflexil进行编辑而没有问题也使用更新的反射,然后我也尝试了dnSpy最新的每晚3.0.1。
哎呀,以为我正在失去理智我甚至用旧的GreyDragon打开它,也编辑了一些IL,保存了exe程序集,甚至IL直接在入口点main仍然没有执行改变但是作为先前未更改的原始但是在所有这些工具中,如果我重新打开以前编辑和保存的汇编exe,它在所有情况下都能正确显示更改,包括反编译的C#以及相应的IL指令。
我能指出的唯一不同之处是新的目标dotnet版本,并且它是在较新的C#编译器/ ver中编译的。
那么,有没有理由最新版本的C#Rosylyn等会阻止IL编辑方法(以及几乎所有可以进行IL编辑的工具)以前从现在开始工作,几乎就像一个辅助指令备份表等那个持有原始未经编辑的副本会被执行吗?
或者,装配再生的特定“设置”是否会导致此行为?
让我们先从我开始尝试描述更精细细节之前可能缺少一些基本障碍的大局开始。
再次抱歉没有真正的代码可以分享,但希望真正的大师会知道发生了什么并有想法。谢谢!
答案 0 :(得分:0)
发布我自己的答案不能相信我错过了这个。
答案是即使它没有作为GAC中的程序集安装,这个应用程序行为也发生了变化,我错过了某个进程运行NGEN.EXE反对它将NI本机映像编译为NATIVE IMAGE并安装它 - 然后包含有问题的friggin机器代码的缓存版本 - 正是我的直觉所说的发生了我只需要找到“备份副本”。