ServiceStack 对 Razor v2 的新支持使用 FileSystemWatcher
来检测对跟踪 View 文件的更改并将它们标记为无效,以便在下一个请求时重新编译它们。
这对于调试非常有用,因为它允许您编辑 View 而不是重建/重新启动您的项目。
在我的 Mac OS X(Mountain Lion)上的 Mono(目前运行 3.0.10)上,显然存在一个 Mono 错误,其中 FileSystemWatcher
不会引发 Changed
事件以进行文件更改。此外,它也不会为子目录中的文件引发任何事件,即使 IncludeSubdirectories
设置为 true。
最佳答案
在调查和测试了各种事情之后,我发现了几个针对 Mono 的旧错误报告,关于失败的 FileSystemWatcher
功能。
在 Mono 源中找到了该问题的解决方法:
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 View 会重新编译。 :)
关于macos - 为什么 ServiceStack Razor FileSystemWatcher 不能在 Mono + Mac OS X 上工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16859372/