我需要一个针对旧版 .NET dll 的hack,因为该dll无法重新编译。例如使用反射等方法的某些hack。
要将其反汇编到IL,您可以使用ILSpy反汇编程序或MSILDissasembler
正如其他人指出的那样,您需要仔细考虑这样做的影响。 它可能会产生比您意识到的更多的连锁反应。
另一件非常重要的事情是,如果常量被其他引用您正在重新编译的dll的dll使用,那么这些dll将无法在未重新编译的情况下看到常量的新值。这是因为当某些东西被定义为常量时,“常量”值作为优化(因此每次使用时不必在引用的dll中查找)在构建时嵌入到引用的dll中,因此对“常量”值的更改实际上从未在引用“常量”的任何库中看到。有关更多详细信息,请参见此问题和答案。
补充Stecya的回答:
常量变量的值将在使用它的任何地方插入。这意味着所有引用您的旧版程序集并使用该常量的程序集也需要重新编译,以反映常量变量的更新值。顺便说一下,这也是通过公共接口以普通属性形式公开常量值的好处所在。
由于const是在编译时计算得出的,因此您无法更改它。唯一的方法是修改该传统程序集以更改该const字段。
反射无法起作用,因为该值是硬编码到应用程序的字节代码中,无法通过反射进行修改。
如果它没有经过代码签名,请使用十六进制编辑器或ILDasm修改常量的值。
如果已经进行了代码签名,则无法解决此问题,除非放弃代码签名。
如果您正在编辑已编译的程序集,请小心。您也许无法这样做的原因有法律上的原因。
编译期间常量值被替换为字面常量,因此您很难在不重新编译的情况下更改它