Roslyn: WorkspaceChangeKind.DocumentRemoved никогда не поднимается - PullRequest
0 голосов
/ 22 мая 2019

Я работаю над плагином Roslyn для Visual Studio.Я пытаюсь подписаться на событие, которое будет вызвано после переименования файла.Я использую Workspace.WorkspaceChanged, но он не вызывает DocumentRemoved.

  1. Не следует ли вызывать WorkspaceChanged (с Kind = DocumentRemoved) после переименования элемента?
  2. Есть ли какие-либоДругой способ получать уведомления о переименованиях элементов решения?Я пытался подписаться на события DTE, но тоже не повезло.

Так я получаю рабочее пространство:

var componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));

_myWorkspace = componentModel.GetService<VisualStudioWorkspace>();

1 Ответ

2 голосов
/ 22 мая 2019

Уже пару лет я что-то делал с этим. Однажды я написал плагин VS, который искал файлы в решении. Он работал с переименованием, если я помню (к сожалению, я не могу проверить, потому что это было для VS 2015). Я сделал это с событиями DTE назад, чем. Я создал DteEventHandler и добавил в DocumentEvents.DocumentSaved свою функцию.

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

Другой способ - это, вероятно, просмотреть файл решения. Файл решения содержит все файлы csproj, и вы можете получить оттуда все файлы.

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

если вы используете git, это, вероятно, самый простой способ просто вызвать состояние git в командных окнах и передать результат через логику вашего плагина.

Надеюсь, я помог вам или указал вам хотя бы в правильном направлении.

...