2013-05-31 106 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

沒錯 - 我只是更新了我的答案,表明這是一種解決方法,而不是「答案」。如果你在寒冷的地方工作並需要熱身,我強烈建議使用這種解決方法! –

相關問題