What entry to make in .pkgdef for a .vsix Visual Studio Snippets Extension

1.6k Views Asked by At

I have a .vsix solution in Visual Studio 2017 for deploying 4 folders of snippets.

Here is what it looks like

Does each folder that has it's own xml or C# snippets need it's own .pkgdef file? Or do we just need a single .pkgdef file located directly under CompanySnippets?

I ask because we had one .pkgdef file with the following entries

[$RootKey$\Languages\CodeExpansions\CSharp\Paths]
"CompanyCodeSnippets"="$PackageFolder$"

[$RootKey$\Languages\CodeExpansions\Xml\Paths]
"CompanyCodeSnippets"="$PackageFolder$"

But we are getting unrecognized language problems for the snippets and I think I've troubleshot it down to the .pkgdef file.

If I make a seperate .pkgdef for each folder of snippets, I will get them to show up.

I'm confused on how to look at the value of $RootKey$, and what the $PackageFolder$ is really dowing. Not much documentation on these values other than what MS says they are. I was debugging VS 2017 and that should be at Registry Computer\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\15.0 , but that registry has no Languages\CodeExpansion, so I'm not sure if that is part of our problem.

And I'm also not sure if $PackageFolder$ is grabbing snippets from subfolders.

Any help is much appreciated.

1

There are 1 best solutions below

0
On

Perhaps late to the party, but here's the official documentation on all the supported substitution strings in pkgdef files: https://learn.microsoft.com/en-au/visualstudio/extensibility/substitution-strings-used-in-dot-pkgdef-and-dot-pkgundef-files?view=vs-2015.

A single pkgdef should be enough, but you'll most likely want to keep the C# and XML snippets in separate folders or else the snippets manager might be confused.

Here's how the corresponding part of your pkgdef should look like:

[$RootKey$\Languages\CodeExpansions\CSharp\Paths]
"CompanyCodeSnippets"="$PackageFolder$\CompanyCodeSnippets-CSharp"

[$RootKey$\Languages\CodeExpansions\Xml\Paths]
"CompanyCodeSnippets"="$PackageFolder$\CompanyCodeSnippets-Xml"

(apologies, cannot remember off the top of my head if one needs to escape the backslash characters in the paths)