使用 Roslyn 的工作区,有没有办法获得一个挂钩到 Visual Studio 提供的活动 IWorkspace?
我希望能够在 Visual Studio 中打开 ExampleProject,然后在我自己的应用程序中,我想通过 再次打开 ExampleProject Roslyn.Services.Workspace
,但仅用于监视在 Visual Studio 中生成的文件/代码更改。我进行了一次充满希望的测试,只是将项目加载到工作区中,并希望它会以某种方式神奇地从磁盘中获取更改,但没有这样的运气。
剩下的唯一可能性是;
直接从 Visual Studio 获取对当前加载的工作区的引用。我不知道 VS 是否甚至跨进程边界暴露了这一点,或者如何找出来。
将我的整个项目重新设计为 Visual Studio 扩展,在那里我可以自动访问打开的工作区。我现在不想深入构建扩展。
这是我用来测试的一些代码:
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;
}
}