Как получить ссылку на объект рабочей области Roslyn из IVsSolution?
У меня есть проект VS-пакета, из которого мне нужно получить доступ к объекту Workspace OR Solution от Roslyn или Microsoft.CodeAnalysis из загруженного IVsSolution.
Мне нужно знать, как я мог это достичь?
Я нашел qaru.site/info/9529/..., в котором предлагается использовать статическое свойство PrimaryWorkspace класса Workspace, которое я не могу найти в Microsoft.CodeAnalysis.Workspace
EDIT:
Я узнал, что у Microsoft.CodeAnalysis этого пока нет, но я загрузил более старую версию Roslyn с Nuget.org, которая имеет это. Но теперь свойство PrimaryWorkspace дает мне NULL:( Я использую изолированную оболочку.
Ответы
Ответ 1
VisualStudioWorkspace
экспортируется через MEF. Если вы уже используете MEF в своем пакете, вы можете просто [Import]
его.
Если нет, вы можете QueryService()
для службы SComponentModel
, а затем получить VisualStudioWorkspace
от этого.
Ответ 2
Внутри функции 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