設計時のコードをコーディングしています。このスニペットを使用したい: (ここにあります)
var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
var solution = dte.Solution;
if (solution != null)
{
string baseDir = Path.GetDirectoryName(solution.FullName);
}
}
問題は、これがコンパイルされないことです。(GetService は既知のメソッド呼び出しではありません) Microsoft.VisualStudio.Shell (および Microsoft.VisualStudio.Shell.10.0) を追加しようとしましたが、役に立ちませんでした。
インターネットで調べてみると、これを呼び出すには IServiceProvider が必要であることがわかりました。
ただし、IServiceProvider を取得する方法を示すすべての例では、EnvDTE を使用しています。
したがって、現在の EnvDTE を取得するには、IServiceProvider が必要です。しかし、IServiceProvider を取得するには、EnvDTE が必要です。(バケツに穴があいてます…)
だから、ここに私の質問があります:
通常の WPF アプリケーションでは、EnvDTEの現在のインスタンスを取得するにはどうすればよいですか?
注: EnvDTE の古いインスタンスを探しているわけではありません。現在の Visual Studio インスタンス用に 1 つ必要です (一度に 3 ~ 4 個の Visual Studio インスタンスを実行しています)。