4

テンプレートからプロジェクトを作成する Visual Studio ウィザードに変更を加えており、拡張ディレクトリにも存在するプロジェクトへのアセンブリへの参照を追加する必要があります。だから私は設定する必要があり<hintpath>ます。

実行中の VS 拡張機能がその拡張機能ディレクトリを検出する方法を理解できませんでした。これは次のようなディレクトリ名です。

%USERPROFILE%\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\myCompany\myExtension

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

"C:\Windows\Microsoft.Net\assembly\GAC_MSIL\myCompany.myExtension\v4.0_1.0.0.0__936015a19c3638eb\myCompany.myExtension.dll"

残念ながら、役に立ちません。MSIL_GACGetCallingAssembly()内の別のディレクトリを指しています。

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

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

4

2 に答える 2

4

たぶん見てくださいIInstalledExtension.InstallPathIInstalledExtension経由でを取得できますIVsExtensionManager

残念ながら、コメントのメッセージは、これが正しい方法ではないことを示唆しています。

この API は Extension Manager インフラストラクチャをサポートしていますが、変更される可能性があるため、使用しないことをお勧めします。

編集:コードは次のとおりです。

    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;
    }

は、拡張機能のファイルstring identifierの「ID」フィールドに入力したものです。source.extension.vsixmanifestデフォルトはパッケージ GUID です。

于 2012-02-12T09:35:11.367 に答える
1

古い回答の質問を掘り下げて申し訳ありません...

私は同様の問題を調べていて、拡張機能マネージャーを実装しましたが、これはかなりひどいと判断しましたが、使用したい場合は、これらのリンクも役立ちます。

https://stackoverflow.com/a/24294185

http://blog.ninlabs.com/2011/04/auto-update-visual-studio-extensions/

しかし、Asp.Net.Scaffolding の CodeGenerator がテンプレート ファイルにアクセスする方法を調べることにしました。結局のところ、非常に簡単です...

var path = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), "MyPath");

シンプル

于 2014-09-16T09:31:06.657 に答える