使用Roslyn的工作區,有什麼方法可以獲取由Visual Studio提供的活動IWorkspace的鉤子?從外部VS主機環境中檢測VS對IWorkspace的更改?
我希望能夠在Visual Studio中打開ExampleProject,然後在我自己的應用程序中,我想通過Roslyn.Services.Workspace
再次打開ExampleProject,但僅用於監視在Visual Studio中生成的文件/代碼更改。我進行了一次充滿希望的測試,只是將項目加載到Workspace中,希望它能以某種方式神奇地從磁盤中獲取更改,但沒有這樣的運氣。
這留下了唯一的可能性;
獲取從Visual Studio的 目前直接加載工作區的參考。我不知道如果VS甚至跨越過程 界限,或如何找出。
將我的整個項目重做爲Visual Studio擴展,其中我 可以自動訪問打開的Workspace。我不想 現在就開始着手構建擴展。
下面是一些代碼我用來測試:
public class ProjectDiskMonitor
{
public ProjectDiskMonitor(string fullProjectPath)
{
WS = Workspace.LoadStandAloneProject(fullProjectPath, null, null, null, true) as Workspace;
WS.WorkspaceChanged += new EventHandler<WorkspaceEventArgs>(TargetProjectChanged);
//this event is not being fired as I edit the project via another instance of VS
}
private void TargetProjectChanged(object sender, WorkspaceEventArgs e)
{
Console.WriteLine("Project changed");
}
private Workspace WS
{
get;
set;
}
}
我正在使用Workspace.LoadStandaloneProject,它具有fileTracking相同的可選參數。但是,當我測試它時,Workspace.WorkspaceChanged事件不會在我編輯+另存爲Visual Studio的其他實例時被觸發。是否有另一個文件跟蹤更改通道?我已經細讀了IProject和ISolution類型,沒有明顯的發現。 – 2012-07-31 03:30:22
嗯,這應該工作... – 2012-07-31 04:57:13
現在,我只是要使用FileSystemWatcher來監視文件,並且當檢測到更改時,我調用ReloadDocument。當我從Workspace中手動調用ReloadDocument時,WorkspaceChanged事件會觸發。 – 2012-07-31 07:21:54