私はいくつかのデザインタイムコードをコーディングしています。アドインをコーディングしていないときに現在のEnvDTEまたはIServiceProviderを取得する
var dte = (EnvDTE.DTE) GetService(typeof(EnvDTE.DTE));
if (dte != null)
{
var solution = dte.Solution;
if (solution != null)
{
string baseDir = Path.GetDirectoryName(solution.FullName);
}
}
問題は、これはコンパイルできないということである(hereを発見):私はこのスニペットを使用します。 (GetServiceは既知のメソッド呼び出しではありません)Microsoft.VisualStudio.Shell(およびMicrosoft.VisualStudio.Shell.10.0)を追加しようとしましたが、それは役に立ちませんでした。
インターネットを見渡すと、これを呼び出すためにIServiceProviderが必要であることがわかりました。
しかし、IServiceProviderを取得する方法を示すすべての例では、EnvDTEを使用しています。
したがって、現在のEnvDTEを取得するには、IServiceProviderが必要です。しかし、IServiceProviderを取得するにはEnvDTEが必要です。ここで、だから、
(...私のバケツに穴があります)私の質問です:通常のWPFアプリケーションで
は、どのように私は現在のインスタンスEnvDTEのを得ることができますか?
注:私はEnvDTEの古いインスタンスを探していません。私は(私は一度のVisual Studioの3-4のインスタンスを実行してください。)私の現在のVisual Studioインスタンスのいずれかが必要
はあなたのWPFのコードは完全にここで別々のプロセスであり、またはWPFのコードはまだビジュアル内部で実行されています他の仕組みを使ってスタジオ? –
@jason - ちょうど普通のwpfアプリ。私は設計時にそれを実行する予定です。しかし、私は実行時に(たとえばOnClickイベントで)動作する例に満足しています。 (新しいwpfアプリケーションを作成し、ウィンドウ上のボタンをドラッグしてダブルクリックしてください) – Vaccano
GetActiveObjectを適切なモニカを使用して、必要なVSインスタンスに呼び出す必要があります。これは、必要な情報の種類ですか:http://msdn.microsoft.com/en-us/library/ms228755.aspx? –