4

テンプレートからプロジェクトを作成するVisual Studioウィザードを変更しています。また、アセンブリへの参照を拡張ディレクトリにも存在するプロジェクトに追加する必要があります。だから私は<hintpath>を設定する必要があります。Visual Studio 2010エクステンションのホームディレクトリを見つける

私は、実行中のVSの拡張機能は、このようなディレクトリ名でその拡張ディレクトリ、発見できる方法を見つけ出すことができていない

%をUSERPROFILE%\のAppData \ローカル\マイクロソフト\ VisualStudioを\ 10.0 \拡張\ myCompanyの\ myExtension

使用System.Reflection.Assembly.GetExecutingAssembly().CodeBase利回り:

「C:\ WINDOWS \ Microsoft.Net \アセンブリ\ GAC_MSIL \ myCompany.myExtension \ V 4.0_1.0.0.0____936015a19c3638eb \ myCompany.myExtension.dll "

残念ながら、役に立たなかったです。 GetCallingAssembly()を使用すると、MSIL_GAC内の別のディレクトリを指しています。

この情報を返すVisual Studioインターフェイスはありますか?私はそれを見つけることができませんでした。

これが不可能な場合は、拡張機能が実験的なインスタンスで実行されているのか、非実験的に実行されているのかを少なくとも判断することはできますか?その情報を使って拡張ディレクトリを見つけることができました。

答えて

4

おそらくIInstalledExtension.InstallPathをご覧ください。 IVsExtensionManagerIInstalledExtensionを得ることができます。

残念ながら、発言中のメッセージは、これは物事を行うには正しい方法ではありません示唆:

このAPIが拡張Managerインフラストラクチャをサポートしていますが、我々はそれが対象となるので、あなたがそれを使用しないことをお勧めします変化する。

EDIT:ここでは、コードです:

static IVsExtensionManager GetExtensionManager() 
    { 
     return myPackage.GetService(System.typeof(IVsExtensionManager)) as IVsExtensionManager; 
    } 
    static IInstalledExtension GetExtension(string identifier) 
    { 
     return GetExtensionManager().GetInstalledExtension(identifier); 
    } 
    static string GetExtensionDirectory(string identifier) 
    { 
     return GetExtension(identifier).InstallPath; 
    } 

stringidentifierはあなたの拡張機能のsource.extension.vsixmanifestファイルの "ID" フィールドに置くものは何でもあります。デフォルトではパッケージのGUIDになります。

私は同様の問題に探していた、とExtension Managerを実装していますが、あなたは利用したくない場合けれども、これは、ちょうどかなりひどいです決めた古い答え質問を掘り起こして申し訳ありません
+0

ありがとう!私はそれをいくつかの正気のチェックと試してみましょう。私はいつも私が今使っているクルージングに落ち着かせることができます。 – UweBaemayr

+0

IVsExtensionManagerとして便利な戻り値Package.GetGlobalService(typeof(IVsExtensionManager)); – Kiquenet

関連する問題