Core_F
Core_F

Reputation: 3442

Receiving the path of a VS2010 extension?

I've written a small Extension for VS2010 (vsix file), within the vsix is a binary file, which gets called by the extension.

I try to open the file like this:

ProcessStartInfo startInfo = new ProcessStartInfo
                                             {
                                                 FileName = @".\Binaries\TFPT.exe"}

Which works fine if I debug everything. But if I install it, I get a "file not found" error. The Binaries are installed correctly.

So I thought I try to get the complete path to the binaries. But how can I get the path? All Application.Path infos are not pointing to the correct path. Is there a way to get the path of the extension directory?

The path is something like: C:\Users[username.domain]\AppData\Local\Microsoft\VisualStudio\10.0\Extensions[Company][ExtensionName]\1.0

Any idea without putting it together by hand?

Upvotes: 2

Views: 1009

Answers (2)

RubenJMarrufo
RubenJMarrufo

Reputation: 179

You can get this path asking for your extension installation path to Visual Studio:

var serviceProvider = [YourPackageObject] as IServiceProvider;
var manager = serviceProvider.GetService(typeof(SVsExtensionManager)) as IVsExtensionManager;
foreach (IInstalledExtension extension in manager.GetInstalledExtensions())
    if(extension.Header.Name == [MyExtensionName])
        return extension.InstallPath;

Upvotes: 1

nulltoken
nulltoken

Reputation: 67589

How about retrieving the path from the current executing assembly and use Path.Combine() with your the remaining relative path segment ?

Note: This piece of code comes from a SO answer.

private static string RetrieveAssemblyDirectory()
{
   string codeBase = Assembly.GetExecutingAssembly().CodeBase;
   var uri = new UriBuilder(codeBase);
   string path = Uri.UnescapeDataString(uri.Path);
   return Path.GetDirectoryName(path);
}

Upvotes: 4

Related Questions