How to get reference to 'Roslyn' Workspace object from IVsSolution?
Asked Answered
S

2

4

I have a VS Package project from which I need to access Roslyn or Microsoft.CodeAnalysis' Workspace OR Solution object from the loaded IVsSolution.

I need to know how I could achieve that ?

I found this stackoverflow discussion here which suggests to use PrimaryWorkspace static property of Workspace class which I can't find in Microsoft.CodeAnalysis.Workspace

EDIT: I found out that Microsoft.CodeAnalysis does not have this yet but I downloaded the older release of Roslyn from Nuget.org which has this. But now PrimaryWorkspace Property is giving me NULL :( I am using Isolated Shell.

Spragens answered 10/5, 2014 at 7:36 Comment(2)
We got rid of PrimaryWorkspace since it was too finicky to get initialized. People would often get NULL when they didn't expect it -- just like you are.Albarran
So what is the better alternative ?Spragens
R
3

The VisualStudioWorkspace is exported through MEF. If you are already using MEF in you package, you can just [Import] it.

If not, you can QueryService() for the SComponentModel service and then get the VisualStudioWorkspace from that.

Reseda answered 10/5, 2014 at 13:32 Comment(1)
Does package support MEF by default or I should do something? I wrote [Import] but withing 'Initialize' it's still null.Dawna
A
3

Within the Initialize() function of your VSPackage, you can use the following:

var componentModel = (IComponentModel)Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel));
var workspace = componentModel.GetService<Microsoft.VisualStudio.LanguageServices.VisualStudioWorkspace>();

I believe you'll also need to add an additional reference to: Microsoft.VisualStudio.LanguageServices.dll

As noted by @Vizu, you can now add this via NuGet:

Install-Package Microsoft.VisualStudio.LanguageServices
Asphyxiant answered 12/5, 2014 at 9:36 Comment(3)
I guess that is prerelease on Nuget and I tried downloading, it failed because some dependency was not found on the gallery.Spragens
Yeah I don't think this dependency will be downloaded if you use NuGet. You have to download from here: msdn.microsoft.com/en-us/vstudio/roslyn.aspx Click the purple "Get the Preview" link and download from there.Asphyxiant
NuGet-ing Microsoft.VisualStudio.LanguageServices now works fine.Beautifully

© 2022 - 2024 — McMap. All rights reserved.