Во-первых, вероятно, было бы лучше использовать расширение обновленной версии образца средства проверки правописания, которое я выпустил; вы можете взять источник на github .
Найти проект данного буфера
Если вы начнете с ITextBuffer
, вы можете добраться до DTE Project
, выполнив:
В любой компонент MEF, который у вас есть (для проверки орфографии, SpellingDictionaryService
- лучшее место), добавьте следующий импорт MEF:
[Импорт] IVsEditorAdaptersFactoryService AdaptersFactory = null;
Также добавьте ссылку на Microsoft.VisualStudio.Editor.dll
в проект, если его там еще нет.
- Либо измените методы на
ISpellingDictionaryService
, чтобы они также взяли ITextBuffer
, либо измените службу, чтобы она возвращала экземпляр словаря правописания, специфичный для буфера / проекта (и тогда методы не должны иметь один передается явно для каждого вызова).
- Используйте
AdaptersFactory.GetBufferAdapter
, чтобы получить буферный адаптер VS (IVsTextBuffer
).
- Приведите это к
IExtensibleObject
и вызовите IExtensibleObject.GetAutomationObject("Document")
, чтобы получить DTE Document
для буфера.
- Здесь вы можете использовать свойство
ProjectItem
, затем ContainingProject
Найдите файл CustomDictionary.xml или добавьте его, если необходимо
Если у вас есть Project
, вы можете использовать project.ProjectItems.Item("CustomDictionary.xml")
, чтобы найти его (хотя я думаю, что это может работать только для каталога верхнего уровня), который выдает ArgumentException
, если он не существует. Если вам нужно добавить его, вы можете записать файл на диск в папке проекта и использовать project.ProjectItems.AddFromFile(string filename)
для его добавления. Вы также можете проверить наличие файла проекта, просто сначала найдя его на диске (создавая или просто записав в него), а затем вызывая AddFromFile в конце, либо только вызывая его, если вы создали файл, либо вызывая его в любом случае и обработка исключения. Когда вы добавили его и закончили его изменение, вы можете получить ProjectItem
для этого файла и использовать метод ProjectItem.Save
, чтобы сохранить его на диск.
Проверить или добавить в систему контроля версий
Из объекта Project
DTE (или любого объекта DTE, на самом деле) вы можете использовать свойство SourceControl
, которое позволит вам проверить, находится ли элемент под контролем исходного кода, и проверить его. Тем не менее, я думаю, что у этого есть только возможность «проверить» файл (я думаю, что это tf edit
, если вы используете TFS), но нет возможности добавить файл в систему контроля версий. Я не уверен, что лучший способ сделать это программно, извините.
Некоторые ссылки из MSDN:
Элементы объекта верхнего уровня DTE
DTE.Project
Члены DTE.SourceControl