2017-01-27 17 views
0

私は、特定のディレクトリ内のすべてのファイル/フォルダを表示するアドインを開発しました。私がしたいのは、ディレクトリ内の.slnファイルが表示された場合、ダブルクリックすると、現在開いているVisual Studioソリューションエクスプローラでソリューションを開くことです。 私はこの特定のコードは、新鮮なVisual Studioでソリューションではなく電流を開き、2015年現在開いているVisual Studio IDEで.slnファイルをプログラムで開く方法

System.Type type = Type.GetTypeFromProgID("VisualStudio.DTE.14.0"); 
EnvDTE.DTE dte = (EnvDTE.DTE)System.Activator.CreateInstance(type); 
dte.MainWindow.Visible = true; 
dte.Solution.Open(path); 

のVisual Studioを使用しています。

ありがとうございます。

+0

[プログラムによって現在のVisual Studio IDEソリューションディレクトリをアドインから取得する](http://stackoverflow.com/questions/2054182/programmatically-getting-the-current- visual-studio-ide-solution-directory-from-a) –

+0

あなたは私の答えをテストしましたか?あなたのフィードバックは何ですか? –

答えて

1

this postによると、その優れた現在のソリューションをこのように取得する:

をDTEを取得するための正しい方法は非常に簡単です。実際には、アドイン は、実行中のDTE(すなわち、 ソリューションが開かれている)への参照を既に持っています。アドイン接続クラスのグローバル変数 _applicationObjectに格納されます。アドインがOnConnectionイベントハンドラで開始されるときに設定されます。だから、あなたが必要なすべてがそう コール

にあり、我々は現在のVisual Studioインスタンス内のソリューションを開くには、これを実行できます。

_applicationObject.Solution.Open(@"D:\folder1\tets.sln"); 

コードは通常どおりにアドインをExecメソッド内で呼び出されます次のようになります。

public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled) 
{ 
    handled = false; 
    if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) 
    { 
     if (commandName == "MyAddin1.Connect.MyAddin1") 
     { 
      _applicationObject.Solution.Open(@"D:\...\tets.sln"); // *** open solution inside current VS instance 

      handled = true; 
      return; 
     } 
    } 
} 
+0

自分の答えを削除する方がはっきりと優れています。また、この質問に重複としてフラグが立てられました。 –

関連する問題