JRebel是一个Java工具,可以自动将新版本的类交换到正在运行的JVM。不仅可以更改方法实现,还可以更改其签名,添加新的或删除现有方法,以及添加/删除字段。关于唯一不能做的是允许在运行中更改类层次结构。特别是对于Web应用程序开发来说,这是一个真正的福音。
我能找到类似.NET的东西吗?
答案 0 :(得分:2)
.net世界中没有这样的东西......不是那么强大......有一些像Edit和Continue这样的东西,但这就像Java中的“Hot replace”,仅此而已。 问题是在.net中你有.dll的整个模型,它们的版本和dll之间的依赖关系指向特定的版本,因此不能替换所有的替换dll。
解决方法就像编译类,添加大量的程序集重定向,以某种方式卸载并加载旧的dll,但这很难。
请记住,在java之后的“模块”JSR实现可能在java 9中我们也不会有JRebel。
答案 1 :(得分:2)
还没有.Net这样的东西。在此期间,您可以尝试NCrunch(http://www.ncrunch.net/),它在后台运行您的测试,当您中断或进行测试时,它会在测试结果中报告,因此您无需等待用于重建和测试执行,因为它是实时发生的。
答案 2 :(得分:0)
自VS 2005以来,有一个内置功能称为“编辑并继续”。你可以看看...... http://msdn.microsoft.com/en-us/library/ms379578(VS.80).aspx。
我认为它并不像JRebel那样软化。
答案 3 :(得分:0)
反射内置于.NET中,应该能够完成大部分工作(在运行时编写/更改内容)。
它不会像JRebel那样完善和任务准备就绪,但是这两个框架又有不同的结构。将它们视为等价物可能是不现实的。
恕我直言,运行时替换作为一种标准实践听起来像是一种破坏运行时的好方法。如果您需要这种热交换功能,也许您最好选择解释语言而不是编译语言。
此外,会话通常是要避免的。如果必须将它用于ASP.NET,则可以使用几个不同的开箱即用提供程序而不是进程中的提供程序,甚至可以使用配置文件。 MSDN page for state manangement
答案 4 :(得分:0)
怎么样
重新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
答案 5 :(得分:-1)
Rebel.NET类似,但这需要重建二进制文件,并且在执行期间无法更改代码。