servicestack,Macos,Mono,servicestack" /> servicestack,Macos,Mono,servicestack" />

为什么';ServiceStack Razor FileSystemWatcher在Mono+;MacOSX?

为什么';ServiceStack Razor FileSystemWatcher在Mono+;MacOSX?,macos,mono,servicestack,Macos,Mono,servicestack,ServiceStack对Razor v2的新支持使用FileSystemWatcher检测对跟踪视图文件的更改,并将其标记为无效,以便在下一次请求时重新编译 这对于调试非常有用,因为它允许您编辑视图,而不是重建/重新启动项目 在我的Mac OS X(Mountain Lion)上的Mono(目前运行的是3.0.10)上,显然存在一个Mono bug,FileSystemWatcher不会为文件更改引发Changed事件。此外,它也不会为子目录中的文件引发任何事件,即使IncludeSubdir

ServiceStack对Razor v2的新支持使用
FileSystemWatcher
检测对跟踪视图文件的更改,并将其标记为无效,以便在下一次请求时重新编译

这对于调试非常有用,因为它允许您编辑视图,而不是重建/重新启动项目


在我的Mac OS X(Mountain Lion)上的Mono(目前运行的是3.0.10)上,显然存在一个Mono bug,
FileSystemWatcher
不会为文件更改引发
Changed
事件。此外,它也不会为子目录中的文件引发任何事件,即使
IncludeSubdirectories
设置为true。

在调查和测试了各种情况后,我发现了一些关于Mono的旧错误报告,其中涉及到
FileSystemWatcher
功能失败

该问题的解决方法可在Mono源中找到:

如果您将环境变量
MONO\u MANAGED\u WATCHER
设置为任意值(我将其设置为“enabled”),那么它将使用
DefaultWatcher
,这是一个托管实现,它在Mac OS X上工作

因此,在应用程序启动期间,我添加了:

Environment.SetEnvironmentVariable("MONO_MANAGED_WATCHER", "enabled");

瞧,我的Razor视图在保存新版本后会重新编译

它可以工作,但mono开始消耗大量CPU时间:~70%的一个内核。

没错,我刚刚更新了我的答案,表明这是一个解决办法,而不是“答案”。如果您在寒冷的地方工作,需要热身,我强烈建议您使用此解决方法!!
Environment.SetEnvironmentVariable("MONO_MANAGED_WATCHER", "enabled");