Visual Studioのカスタム拡張機能はどこにインストールされますか? ExtensionManager.GetInstalledExtensions()
を使用してパスを取得できることはわかっていますが、見つかったパスはどれも私の拡張機能に対応していないようです。
拡張機能(VSIXとして展開されている場合)は、ユーザーのプロファイルにインストールされます。各拡張機能は、たとえば次のようなランダムな名前のフォルダーにインストールされます。
%LocalAppData%\Microsoft\VisualStudio\12.0\Extensions\s5lxc0ne.1kp
実行時にパッケージのインストールパスを取得する場合は、Package
クラスを定義するアセンブリからその情報を取得できます。
static string GetAssemblyLocalPathFrom(Type type)
{
string codebase = type.Assembly.CodeBase;
var uri = new Uri(codebase, UriKind.Absolute);
return uri.LocalPath;
}
...
string installationPath = GetAssemblyLocalPathFrom(typeof(MyPackage));
1-パッケージを見つける...パッケージがMyExtensionPackage
であるとします。
public sealed class MyExtensionPackage : Package
{
//...
}
public static string GetExtensionInstallationDirectoryOrNull()
{
try
{
var uri = new Uri(typeof(MyExtensionPackage).Assembly.CodeBase, UriKind.Absolute);
return Path.GetDirectoryName(uri.LocalPath);
}
catch
{
return null;
}
}