2013-05-31 107 views
3

ServiceStack对Razor v2的新支持使用FileSystemWatcher来检测对跟踪视图文件的更改并将它们标记为无效,以便在下一次请求时重新编译它们。为什么ServiceStack Razor FileSystemWatcher不能在Mono + Mac OS X上运行?

这对调试很好,因为它可以让你编辑你的视图,而不是重建/重启你的项目。

对于我的Mac OS X(Mountain Lion)上的单声道(当前运行的3.0.10),显然有一个单声道错误,其中FileSystemWatcher未提升文件更改的Changed事件。此外,即使IncludeSubdirectories设置为true,它也不会引发任何子目录中的文件事件。

回答

3

经过调查和测试各种事情后,我发现了一些针对Mono的早期错误报告,其中有关失败FileSystemWatcher的功能。

解决方法的问题是单色源中找到: https://github.com/mono/mono/blob/master/mcs/class/System/System.IO/FileSystemWatcher.cs

string managed = Environment.GetEnvironmentVariable ("MONO_MANAGED_WATCHER"); 
... 
if (String.Compare (managed, "disabled", true) == 0) 
    NullFileWatcher.GetInstance (out watcher); 
else 
    DefaultWatcher.GetInstance (out watcher); 

如果设置环境变量MONO_MANAGED_WATCHER任何东西(我将其设置为“已启用”),那么它将使用DefaultWatcher这是一个管理的实施,以及它在我的应用程序启动时在Mac OS X上

于是,我说:

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

和瞧,我保存一个新版本后,我的Razor视图重新编译。 :)

1

它的工作原理,但单声道开始消耗大量的CPU时间:〜70%的一个核心。

+1

没错 - 我只是更新了我的答案,表明这是一种解决方法,而不是“答案”。如果你在寒冷的地方工作并需要热身,我强烈建议使用这种解决方法! –

相关问题