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/

10-15 17:06