C# Roslyn:WorkspaceChangeKind.DocumentRemoved从未引发

C# Roslyn:WorkspaceChangeKind.DocumentRemoved从未引发,c#,roslyn,visual-studio-extensions,vsix,roslyn-code-analysis,C#,Roslyn,Visual Studio Extensions,Vsix,Roslyn Code Analysis,我正在开发Roslyn到Visual Studio的插件。我正在尝试订阅文件重命名后将引发的事件。我正在使用Workspace.WorkspaceChanged,但它不会引发文档删除 重命名项后不应该引发WorkspaceChanged(Kind=DocumentRemoved)吗 是否有其他方法获取有关解决方案项重命名的通知?我试图订阅DTE活动,但也没有成功 这是我获得工作区的方式: var componentModel = (IComponentModel)serviceProvider.

我正在开发Roslyn到Visual Studio的插件。我正在尝试订阅文件重命名后将引发的事件。我正在使用Workspace.WorkspaceChanged,但它不会引发文档删除

  • 重命名项后不应该引发WorkspaceChanged(Kind=DocumentRemoved)吗
  • 是否有其他方法获取有关解决方案项重命名的通知?我试图订阅DTE活动,但也没有成功
  • 这是我获得工作区的方式:

    var componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));
    
    _myWorkspace = componentModel.GetService<VisualStudioWorkspace>();
    
    var componentModel=(icomonentmodel)serviceProvider.GetService(typeof(scocomponentmodel));
    _myWorkspace=componentModel.GetService();
    
    这几年来我一直在做一些事情。我曾经写过一个VS插件,在解决方案中搜索文件。如果我记得的话,rename也可以使用(不幸的是,我无法检查,因为它是针对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状态并将结果传递到插件逻辑可能是最简单的方法


    我希望我能为你提供一些帮助,或者至少为你指明了正确的方向。

    几年来我一直在做这件事。我曾经写过一个VS插件,在解决方案中搜索文件。如果我记得的话,rename也可以使用(不幸的是,我无法检查,因为它是针对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状态并将结果传递到插件逻辑可能是最简单的方法


    我希望我能为您提供一些帮助,或者至少为您指明了正确的方向。

    DocumentInfoChanged呢?也许你可以从这两个问题中得到一些帮助:和。DocumentInfoChanged没有被提出。@Piotr有什么被提出的吗?如果您只打印所有事件的
    WorkspaceChangeEventArgs.Kind
    ,那么重命名文档时您会得到什么吗?@JoshVarty我只得到:1。项目已更改-未包含文档Id 2。DocumentChanged by old and new solution指向新文档。DocumentInfoChanged呢?也许你可以从这两个问题中得到一些帮助:和。DocumentInfoChanged没有被提出。@Piotr有什么被提出的吗?如果您只打印所有事件的
    WorkspaceChangeEventArgs.Kind
    ,那么重命名文档时您会得到什么吗?@JoshVarty我只得到:1。项目已更改-未包含文档Id 2。DocumentChanged by old and new solution指向新文档。文档保存时会引发DocumentSaved,而不是重命名?文档保存时会引发DocumentSaved,而不是重命名?