【问题标题】:Why doesn't the ServiceStack Razor FileSystemWatcher work on Mono + Mac OS X?为什么 ServiceStack Razor FileSystemWatcher 不能在 Mono + Mac OS X 上运行?
【发布时间】:2014-07-25 23:26:24
【问题描述】:

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

这非常适合调试,因为它允许您编辑视图而不是重新构建/重新启动项目。

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

【问题讨论】:

    标签: macos mono servicestack


    【解决方案1】:

    在调查和测试各种事情之后,我发现了几个针对 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 视图会在我保存新版本后重新编译。 :)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 没错 - 我刚刚更新了我的答案以表明这是一种解决方法,而不是“答案”。如果您在寒冷的地方工作并且需要热身,我强烈建议您使用此解决方法!
      猜你喜欢
      • 2015-03-07
      • 1970-01-01
      • 2023-03-18
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多