I am making changes to a Visual Studio wizard that creates a project from a template, and needs to add a reference to an assembly to the project that also lives in the extension directory. So I need to set the <hintpath>.
I have not been able to figure out how a running VS extension can discover its extension directory, which is a directory name like this:
%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\myCompany\myExtension
Using System.Reflection.Assembly.GetExecutingAssembly().CodeBase yields:
“C:\Windows\Microsoft.Net\assembly\GAC_MSIL\myCompany.myExtension\v4.0_1.0.0.0__936015a19c3638eb\myCompany.myExtension.dll”
Unfortunately, not helpful. Using GetCallingAssembly() is no better–it points at another directory in the MSIL_GAC.
Is there a Visual Studio interface that returns this information? I haven’t been able to find it.
If that’s not possible, is it at least possible to determine if the extension is running in the experimental instance vs. non-experimental? I could use that information to locate the extension directory.
Maybe look at
IInstalledExtension.InstallPath. You can get anIInstalledExtensionvia anIVsExtensionManager.Unfortunately, the message in the remarks suggests this is not the right way to do things:
EDIT: Here’s the code:
The
stringidentifieris whatever you put in the “ID” field of your extension’ssource.extension.vsixmanifestfile. It defaults to the package GUID.