Как получить ссылку на объект рабочего пространства Roslyn из IVsSolution?
У меня есть проект VS Package, из которого мне нужно получить доступ к объекту рабочей области Roslyn или Microsoft.CodeAnalysis ИЛИ Solution из загруженного IVsSolution.
Мне нужно знать, как я могу этого достичь?
Я нашел это обсуждение потока стека здесь, которое предлагает использовать статическое свойство PrimaryWorkspace класса Workspace, которое я не могу найти в Microsoft.CodeAnalysis.Workspace
РЕДАКТИРОВАТЬ: Я обнаружил, что Microsoft.CodeAnalysis еще не имеет этого, но я скачал более старую версию Roslyn с Nuget.org, которая имеет это. Но теперь свойство PrimaryWorkspace дает мне значение NULL:(Я использую изолированную оболочку.
2 ответа
VisualStudioWorkspace
экспортируется через MEF. Если вы уже используете MEF в своем пакете, вы можете просто [Import]
Это.
Если нет, вы можете QueryService()
для SComponentModel
обслуживание, а затем получить VisualStudioWorkspace
От этого.
В функции Initialize() вашего VSPackage вы можете использовать следующее:
var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();
Я считаю, что вам также нужно добавить дополнительную ссылку на: Microsoft.VisualStudio.LanguageServices.dll
Как отмечает @Vizu, теперь вы можете добавить это через NuGet:
Install-Package Microsoft.VisualStudio.LanguageServices