2016-06-13 14 views
0

Visual Studio(2012)を自動化するアウトプロセスコンソールプログラムを作成しています。 出力ペインのコンテンツをすぐに読み込むか、出力ウィンドウに追加された各行の通知に登録する必要があります。EnvDTE(非パッケージ)経由でVisual Studio出力ウィンドウのコンテンツを取得する方法

私は、パッケージを書くときにのみ適用されるいくつかの例を見てきましたが、プロセス外プログラムに対しては適用しません。

現時点で大きな問題は、サービスプロバイダーのGetServiceを使用して出力ウィンドウサービスを取得できないことです。常にnullを返します。 私はパッケージを書いていない場合、私はそれを得ることができるか分からない。

+0

を動作するようです、あなたは、現在実行中のインスタンスへの参照を取得していますか?これは非常に扱いにくいことがあります。 http://stackoverflow.com/questions/14205933/how-do-i-get-the-dte-for-running-visual-studio-instance/14205934#14205934 – Will

+0

私は実際にそれを使用して作成しています: var vsType = Type.GetTypeFromProgID( "VisualStudio.DTE.11.0"); _dte = Activator.CreateInstance(vsType)をDTE2とします。 – Tal

答えて

0

これは私のために

public string GetOutput() 
{ 
    const string buildOutputPaneGuid = "{1BD8A850-02D1-11D1-BEE7-00A0C913D1F8}"; 
    const string vsWindowKindOutput = "{34E76E81-EE4A-11D0-AE2E-00A0C90FFFC3}"; 
    var outputWindow = dte.Windows.Item(/*EnvDTE.Constants.*/vsWindowKindOutput); 
    var outputWindowDynamic = outputWindow.Object; 

    foreach(OutputWindowPane pane in outputWindowDynamic.OutputWindowPanes) 
    { 
     if (pane.Guid == buildOutputPaneGuid) 
     { 
      try 
      { 
       pane.Activate(); 
       var sel = pane.TextDocument.Selection; 
       sel.StartOfDocument(false); 
       sel.EndOfDocument(true); 
       return sel.Text; 
      } 
      catch (Exception ex) 
      { 
       return null; 
      } 
     } 
    } 

    return null; 
} 
関連する問題