35

JRebel 是一个 Java 工具,可以自动将新版本的类交换到正在运行的 JVM。不仅可以更改方法实现,还可以更改其签名,添加新方法或删除现有方法,以及添加/删除字段。唯一不能做的就是允许即时更改类层次结构。特别是对于 Web 应用程序开发来说,这是一个真正的福音。

我可以为 .NET 找到类似的东西吗?

4

6 回答 6

2

.Net 还没有这样的东西。同时,您可以尝试 NCrunch ( http://www.ncrunch.net/ ),它在后台运行您的测试,当您中断或通过测试时,它会在测试结果中报告,因此您不必不需要等待重建和测试执行,因为它是实时发生的。

于 2014-09-16T17:11:54.010 回答
2

.net 世界中没有这样的东西.. 没有那么强大.. 有一些类似 Edit and Continue 的东西,但这就像 Java 中的“热替换”,仅此而已。问题出在.net 中,您拥有.dll 的整个模型以及它们的版本和指向特定版本的dll 之间的依赖关系,因此不可能在不全部替换的情况下替换dll。

一种解决方法是编译类,添加大量的程序集重定向,以某种方式卸载和加载旧的 dll,但这非常困难。

请记住,在实现“模块”JSR 之后的 java 中,可能在 java 9 中我们也不会拥有 JRebel。

于 2013-06-03T13:53:37.053 回答
0

好吧,自 VS 2005 以来就有一个内置功能,称为“编辑并继续”。你可以看看... http://msdn.microsoft.com/en-us/library/ms379578(VS.80).aspx

我认为它不像 JRebel 那样复杂。

于 2010-08-11T13:05:38.267 回答
0

反射内置于 .NET 中,应该能够完成大部分这些事情(在运行时编写/更改内容)。

它不会像 JRebel 那样完善和准备就绪,但是这两个框架又开始具有不同的结构。将它们视为等价物可能不现实。

恕我直言,作为标准做法的运行时替换对我来说听起来像是破坏运行时的好方法。如果您需要这种热交换功能,也许您最好选择解释语言而不是编译语言。

此外,会话通常是要避免的。如果您必须将它用于 ASP.NET,您可以使用一些不同的开箱即用的提供程序来代替进程中的提供程序,或者甚至使用配置文件来代替。 用于状态管理的 MSDN 页面

于 2011-09-08T18:56:39.317 回答
0

怎么样

重新JIT

https://channel9.msdn.com/Shows/Going+Deep/CLR-45-David-Broman-Inside-Re-JIT

哦,那不是它,但无论如何可能有用:

具有针对性修补的弹性 NGen

请参阅https://channel9.msdn.com/Blogs/Charles/Sur​​upa-Biswas-CLR-4-Resilient-NGen-and-Targeted-Patching

于 2015-09-02T22:59:37.203 回答
-1

有类似的 Rebel.NET,但这需要重建二进制文件并且在执行期间不能更改代码。

于 2011-08-28T20:42:55.120 回答