ベクトルドロー・レベルゼロ+

ホーム > コンピュータ > C# > WPF in C#

ホスト統合のVSTAサンプル あなたのホスト・アプリケーションからIDEを起動する

作成日 2015.06.05
最終更新日 2015.06.05

概要

Visual Studio Communityが無償で使えるようになったので、Expressエディションで使えなかった機能が使えるようになりました。 Microsoft Visual Studio Tools for Applications(VSTA)は、 VBAやC#を使ったマクロ機能をアプリケーションに組込むことができる機能です。

VSTA Sample Host Integration.docは、SDKをダウンロードする際、一緒にダウンロードすることができます。

インストール

VSTA2013とVSTA2012SDKをインストールします。

ダウンロード先

Microsoft Visual Studio Tools for Applications 2013(VSTA)(外部サイト)

Microsoft Visual Studio Tools for Applications 2012 SDK(外部サイト)

ホスト統合のVSTAサンプル

[VSTA Sample Host Integration]

あなたのホスト・アプリケーションからIDEを起動する

Launching an IDE from Your Host Application

VSTA SDKがインストールされたあと、あなたが、1つのアセンブリに参照を追加し、 続いて、3行のコードを記述すると、あなたは、Visual C#を用いて、 アプリケーションからVisual Studioを起動することができます。IDEを起動する、アプリケーションを有効にするには:

  1. Visual Studio 2012で、WPFのアプリケーションを作成し、そして、それに「MyVSTAHost」という名前をつけます。
  2. Solution Explorerで、MyVSTAHostプロジェクト・ノードのショートカットメニューを開き、そして、参照の追加を選択します。
  3. 参照の追加ダイアログボックスで、Microsoft.VisualStudio.Tools.Applications version 11.0.0.0を選択します。そして、「ボタンを追加」を選択します。
  4. 既定のフォームに、ボタンを追加します。そして、ボタンにイベントハンドラを追加します。
  5. あなたのフォ-ムに、次に示す命令を追加します。:
  6. using VSTA = Microsoft.VisualStudio.Tools.Applications;
  7. あなたのイベントハンドラに、次に示すコードを追加します。:
  8. private VSTA.Session _session;
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (_session == null)
                {
                     var sessionMgr = VSTA.SessionManager.Create("MyHostApp");
                    _session = sessionMgr.CreateSession();
                }
                _session.Ide.Show();                
            }        
    

このコードは、以下を処理します。:

  1. まだ、1つも作成されない場合、セッションを作成します。 これは、IDEをやりとりし、プロジェクトを管理するために必要となる、基準となる足場を起動します。
  2. セッション上のIDEインスタンスは、IDEを表示します。これは、暗黙的に、IDE処理を起動するでしょう。 IDEへの通信チャネルを開きます。そして、メイン・ウィンドウを表示することを、IDEを伝えます。

備考:

  • セッションの名前は、実行中のHost Applicationインスタンスのコンテクスト内で、 一意である必要があります。言い換えると、「if(_session == null)」状態は、ユーザーがボタンを選択するたび、他のセッションを、同じ名前で作成することから防ぎます。 この状況は、IDEオブジェクトがアクセスされるとき、デッドロック状態につながることがあります。
  • SessionとSessionManagerオブジェクトは、実際に、IDisposableです。 あなたが、これらのオブジェクトを使用する場合、あなたは、これらのオブジェクトをインスタンス上に保持するクラスのために、IDisposableの適切な実装を使用する必要があります。 あなたが、これらのオブジェクトのインスタンス上に保持することを失敗した場合、.NETのガーベジコレクタは、それらを処分することができます。それは、例外につながります。
ページトップへ
WPF in C#
C#トップ
Copyright (C) 2011-2016 kukekko All Rights Reserved.
kukekko@gmail.com
ご連絡の際はアドレスの@は半角にしてください。 また、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません 」。
inserted by FC2 system