30

アドインから現在のソリューションディレクトリを取得する方法は次のとおりです。

_applicationObject = (DTE2)application;  // retrieved from OnConnection method
string solutionDir = System.IO.Path.GetDirectoryName(_applicationObject.Solution.FullName);

VSPackageを介してこれをどのように行いますか?

IDEとのより深い統合を必要とするいくつかのユーザーコントロールを追加するつもりなので、VisualStudioアドインをVSPackageに移行しています。

http://nayyeri.net/visual-studio-addin-vs-integration-package-part-1のようなアドインと統合パッケージの相対的なメリットに関するいくつかの良い参考資料を見つけました。

そして、次のようなVSPackagesのmsdnに関するいくつかの優れたチュートリアル:http: //msdn.microsoft.com/en-us/library/cc138589.aspx

アドイン(DTEなど)の高レベルのインターフェイスがVSPackagesの低レベルのインターフェイスにどのようにマップされるかについて、(msdnなどで)適切なリファレンスをまだ見つけていません。

アドインインターフェイスからVSPackageインターフェイスへの一般的なマッピングに役立つ参考資料はありますか?

4

3 に答える 3

30

特定の質問に対する答えを見つけました。VisualStudio.DTEオブジェクトはGetService()、次のメソッドを介して取得できます。

// Get an instance of the currently running Visual Studio IDE
DTE dte = (DTE)GetService(typeof(DTE));
string solutionDir = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
于 2010-02-26T00:50:37.310 に答える
10

次のいずれかの関数からDTEオブジェクトを取得できます。

public static DTE GetCurrentDTE(IServiceProvider provider)
{
    /*ENVDTE. */DTE vs = (DTE)provider.GetService(typeof(DTE));
        if (vs == null) throw new InvalidOperationException("DTE not found.");
    return vs;
}

public static DTE GetCurrentDTE()
{
    return GetCurrentDTE(/* Microsoft.VisualStudio.Shell. */ServiceProvider.GlobalProvider);
}

その後、プロパティからアクティブになり 、プロパティSolutionからパスを取得できます。DTE.SolutionSolutionDTE.Solution.Path

于 2011-01-06T08:40:34.540 に答える
2

IVsSolutionインターフェイスを使用する場合GetSolutionInfoは、ソリューションのパス、ソリューションのファイル名、およびソリューションのユーザーオプション(SUO)のファイル名を取得するために使用できます。

this.solution.GetSolutionInfo(
    out string solutionDirectory,
    out string solutionFile,
    out string userOptsFile);
于 2019-07-29T21:59:05.330 に答える