罗斯林:WorkspaceChangeKind.DocumentRemoved从未提出

时间:2019-05-22 12:13:48

标签: c# roslyn visual-studio-extensions vsix roslyn-code-analysis

我正在研究Visual Studio的Roslyn插件。我正在尝试订阅文件重命名后将引发的事件。我正在使用Workspace.WorkspaceChanged,但不会引发DocumentRemoved。

  1. 重命名项目后不应该引发WorkspaceChanged(带有Kind = DocumentRemoved)吗?
  2. 还有其他方法可以获取有关解决方案项目重命名的通知吗?我试图订阅DTE事件,但也没有运气。

这是我获得工作空间的方式:

SELECT DISTINCTROW tblToDo.ID, tblToDo.FROM tblToDo 
LEFT JOIN tblToDoLabels ON tblToDo.ID = tblToDoLabels.ToDo
WHERE tblToDoLabels.Label In (3,20)
GROUP BY tblToDo.ID, tblToDo.ToDo
HAVING Count(tblToDoLabels.ToDo)=2;

1 个答案:

答案 0 :(得分:2)

这已经两年了,我做了一些事情。我曾经写过一个VS插件,可以在解决方案中搜索文件。如果我记得的话,它也可以使用重命名(不幸的是我无法检查,因为它是针对VS 2015的)。我用DTE事件做过。我创建了一个DteEventHandler并将其添加到DocumentEvents.DocumentSaved函数中。

dte = Package.GetGlobalService(typeof(DTE)) as DTE2;
events = dte.Events;
docEv = events.DocumentEvents;
docEv.DocumentSaved += ScanDocumentForFunction;

另一种方法可能是浏览解决方案文件。 solutionfile包含所有csproj文件,您可以从那里获取所有文件。

dte = FillIndexListCommandPackage.GetGlobalService(typeof(DTE)) as DTE2;
var solutionnamearr = dte.Solution.FullName.Split('\\');
...

如果使用git,则可能是在命令窗口中仅调用git状态并将结果通过管道传递到插件逻辑的最简单方法。

我希望我能有所帮助或至少向您指出正确的方向。