是否有类似于 JRebel 的 .NET 工具?

35

JRebel 是一款用于 Java 的工具,可以自动替换正在运行的 JVM 中的类的新版本。它不仅可以更改方法实现,还可以更改它们的签名,添加新方法或删除现有方法,以及添加/删除字段。唯一不能做到的是允许动态修改类层次结构。它特别适合 Web 应用程序开发。

我是否可以在 .NET 中找到类似的工具?


1
当你更新应用程序文件时,Asp.Net的整个应用程序热交换能力存在什么特定问题? - Tim Lloyd
JRebel可以在不重新编译整个应用程序的情况下完成此操作。这意味着作为用户,您不会丢失会话信息等内容。我不确定ASP.NET是否可以按页面进行此操作,因为所有页面都编译成单个dll。考虑到经典ASP.NET中的postback的性质,重新编译整个应用程序可能会破坏它。 - stombeur
有人应该回答这个问题,而不是简单地回答“不行”,而是提供一种开发工作流程,可以最小化重启iisexpress或任何你正在使用的Web服务器。例如,进行更多的单元测试 - 当你在Web服务器上运行代码时,它会更加稳定。 - Jess
6个回答

2
在.NET世界中,不存在像Java中那样强大的功能。虽然有类似于"编辑和继续"的东西,但这只是Java中的"热替换",没有更多了。问题在于,在.NET中,您拥有所有.dll文件的模型及其版本以及dll之间的依赖关系,指向特定版本,因此不可能替换dll而不替换所有内容。
一种解决方法是编译类,添加大量程序集重定向,以某种方式卸载并加载旧的dll,但这非常困难。
请记住,在Java中,如果实现了"模块"JSR(可能在Java 9中),我们也将无法使用JRebel。

2

目前尚无此类 .Net 工具。与此同时,您可以尝试使用 NCrunch (http://www.ncrunch.net/),它可以在后台运行测试,一旦您打破了测试或使其通过,测试结果就会报告出来,因此您不需要等待重建和测试执行,因为它是实时发生的。


0

7
与此并不特别相关,而且由于其实现非常糟糕且无用,因此 E&C 并不是一个值得一提的功能。 - Dmitri Nesteruk
1
JRebel所做的事情与Edit and Continue完全不同。E&C是一项仅在调试期间使用的功能。最大的区别是您无法在托管在IIS(或无用的Web开发服务器)中的Web应用程序中使用Edit and Continue。我认为最大的区别是后者。如果您正在开发大型Web应用程序,则构建/重新部署周期是最浪费时间的。 - tbaskan
3
很遗憾它不支持64位系统。我希望微软能够解决这个问题... - Rick Minerich

0

0

反射是内置在.NET中的,应该能够在运行时完成大部分操作(编写/更改)。

它不会像JRebel那样精细和任务就绪,但两个框架从一开始就有不同的结构。认为它们是等价物可能并不现实。

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

此外,会话通常是要避免的。如果您必须在ASP.NET中使用它,可以使用几个不同的开箱即用提供程序,而不是使用进程内提供程序,甚至可以使用配置文件。

MSDN页面状态管理

-1

有一个类似的工具叫做Rebel.NET,但是它需要重新构建二进制文件,并且不能在执行期间更改代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接