inversionhourglass / Rougamo

Compile-time AOP component. Works with any method, whether it is async or sync, instance or static. Uses an aspectj-like pattern to match methods.
MIT License
393 stars 47 forks source link

使用库后,如果运行中修改代码,程序热重载功能会报错 #37

Closed yangbocheng closed 4 months ago

yangbocheng commented 1 year ago

这个库真是宝藏,作者nb。 但是使用中发现一个小问题: 使用了库后,会导致项目的热重载功能失效。请问有无解决办法,(没有也问题不大)

image

inversionhourglass commented 1 year ago

感谢反馈,这个之前有遇到过,我还以为是更新VS后导致的,没想到是肉夹馍的导致的,这个要抽空研究一下了,可能暂时无法修复

yangbocheng commented 1 year ago

感谢回复。
补充下 热重载失败后在错误栏有这个提示 image

CodorMonkey commented 1 year ago

在Rider中使用也出现了这个错误,.NET7,Rougamo.Fody 1.4.1 image

inversionhourglass commented 1 year ago

这个问题应该跟 #36 属于同类问题,解决 #36 应该就能解决。但目前还没有时间在2.0版本完成支持(可以看我在 #36 中的回复),将在后续版本中修复。

bxjg1987 commented 11 months ago

这个问题应该跟 #36 属于同类问题,解决 #36 应该就能解决。但目前还没有时间在2.0版本完成支持(可以看我在 #36 中的回复),将在后续版本中修复。

我2.0 也是这个错误,自定义的切面的 调试可以进入,热重载提示上面兄弟的截图

zhaxg commented 6 months ago

https://github.com/pamidur/aspect-injector 这个不会影响热重载,但是没有肉夹馍好用,接口拦截也不好

zhaxg commented 5 months ago

有进展了么?

inversionhourglass commented 5 months ago

有进展了么?

没有,目前主要着手解决 #36,之前以为是同类问题,现在看来并不是。等 #36 解决之后会回看这个问题,如果好解决就跟 #36 同一个版本修复,不好解决就延期到下一个大版本

inversionhourglass commented 4 months ago

各位,遗憾的通知,肉夹馍将不会支持热重载,理论上静态代码织入的库都无法实现热重载。

@zhaxg 所提及的库其实也没有支持热重载,你们可以试试,对于修改了代码的方法,他的切面代码将无法触发。

热重载的大概原理是,在启动调试时监控代码文件,在代码文件修改时进行局部编译然后修改对应方法IL,静态代码织入是在编译时一次性修改方法IL,无法在热重载发生时再次触发。所以类似 aspect-injector 这种看似支持热重载的库,其实在热重载发生时会导致AOP代码全部被移出。

如果各位发现有静态AOP库能实现热重载的,可以再次开启该issue

bxjg1987 commented 3 months ago
#if !DEBUG
[MyInterceptor]
#endif
public void xxx()
{

}