JRebel 是一款用于 Java 的工具,可以自动替换正在运行的 JVM 中的类的新版本。它不仅可以更改方法实现,还可以更改它们的签名,添加新方法或删除现有方法,以及添加/删除字段。唯一不能做到的是允许动态修改类层次结构。它特别适合 Web 应用程序开发。
我是否可以在 .NET 中找到类似的工具?
JRebel 是一款用于 Java 的工具,可以自动替换正在运行的 JVM 中的类的新版本。它不仅可以更改方法实现,还可以更改它们的签名,添加新方法或删除现有方法,以及添加/删除字段。唯一不能做到的是允许动态修改类层次结构。它特别适合 Web 应用程序开发。
我是否可以在 .NET 中找到类似的工具?
目前尚无此类 .Net 工具。与此同时,您可以尝试使用 NCrunch (http://www.ncrunch.net/),它可以在后台运行测试,一旦您打破了测试或使其通过,测试结果就会报告出来,因此您不需要等待重建和测试执行,因为它是实时发生的。
自从VS 2005以来,就有一个名为“编辑并继续”的内置功能。你可以看一下这个链接:http://msdn.microsoft.com/en-us/library/ms379578(VS.80).aspx。
我认为它不像JRebel那样复杂。
如何呢?
重新即时编译(Re-JIT)
https://channel9.msdn.com/Shows/Going+Deep/CLR-45-David-Broman-Inside-Re-JIT
哦,那不是它,但可能仍然有用:
具有定向修补的弹性 NGen
请参见https://channel9.msdn.com/Blogs/Charles/Surupa-Biswas-CLR-4-Resilient-NGen-and-Targeted-Patching
反射是内置在.NET中的,应该能够在运行时完成大部分操作(编写/更改)。
它不会像JRebel那样精细和任务就绪,但两个框架从一开始就有不同的结构。认为它们是等价物可能并不现实。
在我看来,将运行时替换作为标准做法听起来像是破坏运行时的好方法。如果您需要这种热交换功能,也许最好选择解释性语言而不是编译型语言。
此外,会话通常是要避免的。如果您必须在ASP.NET中使用它,可以使用几个不同的开箱即用提供程序,而不是使用进程内提供程序,甚至可以使用配置文件。
MSDN页面状态管理有一个类似的工具叫做Rebel.NET,但是它需要重新构建二进制文件,并且不能在执行期间更改代码。