8

My goal is to create a "Visual Studio Extensibility" which adds a "Npm install" Context Menu Item to a package.json file.

So far, this works great if I open a solution, because I've added the [ProvideAutoLoad(Microsoft.VisualStudio.Shell.Interop.UIContextGuids.SolutionExists)] attribute to the Package class.

But it's not working if I open a Web Site (File->Open->Web Site...). Do you have any idea, how I can AutoLoad the Package.cs for every UI Context?

Edit: More information after further investigation: If I save the Web Site as a Solution, the "Initialize"-Method is called. But the BeforeQueryStatus of the MenuItem of package.json is not called. The solution structure looks like this:

-Solution
 -project
  -package.json

If I add the package.json directly into the solution, the Context Menu Item appears. Structure:

-Solution
 -Solution Items
  -package.json
 -project

Any ideas?

Tineler
  • 253
  • 3
  • 17

2 Answers2

7

Add the below code to your package definition:

[ProvideAutoLoad(VSConstants.UICONTEXT.NoSolution_string)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionHasMultipleProjects_string)]
[ProvideAutoLoad(VSConstants.UICONTEXT.SolutionHasSingleProject_string)]

Your package should load in all scenarios.

Kaveesh
  • 388
  • 6
  • 14
1

You can add the second ProvideAutoLoad attribute with the NoSolution value to load your package in all contexts.

Sergey Vlasov
  • 26,641
  • 3
  • 64
  • 66
  • It's still not working. I think it's somehow, because the "project" is not a real project, but a web site. Somehow, the parent seems to be another. So far, I add following parent to the button: `` – Tineler Dec 30 '14 at 08:01