2008年5月27日

Pipeline Builder CTP March-2008 その1

 Pipeline Builderをインストールして、サンプルプロジェクトを使って各プロジェクトを生成するところまでしました。この後の作業として、さくっとホストとアドインを作ってみます。

アドイン プロジェクト

 ソリューションにアドイン用のプロジェクト(クラスライブラリ)を追加します。宗教的な問題でVisual Basicです。ちなみにPipeline Builderで生成されるコードは今のところC#のみになっています。

 参照の追加します。System.AddInとSample.Blankプロジェクト(つまりビュー)を参照します。プロジェクトの参照は、デフォルトでDLLをローカルにコピーするようになるので、プロジェクトのプロパティからFalseに変更します。

参照の追加

 さらにビルド出力先を変更しましょう。アドインのアセンブリは、AddIns\任意の名前 フォルダ以下に配置する必要があります。サンプルではoutputフォルダを出力先のルートにしていたので、「..\output\AddIns\Class1」のように設定します。

 クラスにAddIn属性を付け、ビューのインタフェース ISampleAddInを実装します。ひとつのメソッドがあるだけでしたね。

Imports System.AddIn
Imports Sample.Blank

<AddIn("SampleAddIn")> _
Public Class Class1
    Implements ISampleAddIn

    Public Sub DoStuff() Implements Sample.Blank.ISampleAddIn.DoStuff
        Console.WriteLine("Hello!")
    End Sub
End Class

 アドイン部分はこれで終了です。

ホスト アプリケーション プロジェクト

 次はホスト アプリケーションのプロジェクトを追加します。コンソールアプリケーションにしました。

 アドイン同様に参照を追加します。System.AddInと、ビューは共有していたのでこれも同じくSample.Blankプロジェクトを追加します。ホスト側のビューアセンブリは、ホストアプリケーションのアセンブリと同階層に置く必要がるのでローカルコピーが有効なままで結構です。

 ビルド場所は「..\output」にします。また、このプロジェクトをスタートアッププロジェクトに設定しておきましょう。

 アドインの探索、アクティブ化、破棄は次のようになります。

Imports System.AddIn.Hosting
Imports Sample.Blank

Module Module1
    Sub Main()
        Dim addInRoot = Environment.CurrentDirectory

        ' パイプライン セグメント キャッシュ更新
        Dim warnings() As String = AddInStore.Update(addInRoot)
        For Each warning As String In warnings
            Console.WriteLine(warning)
        Next

        ' アドイン探索
        Dim tokens = AddInStore.FindAddIns(GetType(ISampleAddIn), addInRoot)

        ' アクティブ化
        Dim instance = tokens.Single.Activate(Of ISampleAddIn)(AddInSecurityLevel.Internet)

        ' アドインのメソッド実行
        instance.DoStuff()

        ' 破棄
        AddInController.GetAddInController(instance).Shutdown()

        Console.ReadLine()
    End Sub
End Module

 実行すると……アドインの呼び出し成功ー。

サンプルの実行

 Pipeline Builderを使ったサンプルは以上です。まだ私も試してませんが、Pipeline Builderでイベントの作成や、生成したコードを修正した場合なども考慮されているみたいですね。

Managed Extensibility and Add-In Framework - Home

posted @ 22:14 | Feedback (0)

 System.AddInを利用するとホストとアドイン自体のアセンブリ以外に5つのアセンブリが必要になる。その中で重要な部分はコントラクトと呼ばれるホストとアドイン間のプロトコル定義のインタフェースのみ。コントラクトは基本的にアドインが実装するべきメソッドになると思う。ただしアドイン開発者はこのインタフェースを知っている必要はない。

 このコントラクトの内容を考える以外は、ホストとアドイン間でやりとりができるように、ただひたすらインタフェースやら抽象クラスやらを記述するのみ。これがたいへん。今日、アドインにイベントを追加できることを確認したけど、10数以上のファイル(インタフェースやクラス)の記述が必要になってくる。

 前置きは終わり。詳しくはMSDNへ。おすすめは「チュートリアル : 拡張性のあるアプリケーションの作成」。やることわかってないと以下のPipeline Builderが何をしてくれるのかわからないと思う。

Pipeline Builderのインストール

 コントラクトのみ記述して、他のアドインとビューのプロジェクトおよびコードを自動生成してくれるツールを使ってみました。開発者はCLR Add-Inチーム。Visual Studio 2008のアドインとして動作します。以下からまずはインストーラをダウンロードしてインストール。

Managed Extensibility and Add-In Framework - Release: Pipeline Builder CTP March-2008

 Visual Studio 2008の登録方法は、メニューのツール-オプションから「アドイン/マクロ セキュリティ」。ここにPipeline Builderがインストールされた場所を追加します。デフォルトは、Program Files (x86)\Microsoft\Visual Studio Pipeline Builderに入ってます。

 追加したら再起動します。するとツールメニューに次のように項目が増えてます。

PipelineBuilder

Quick Sample

 すぐに試せるようにコントラクトのみのサンプルプロジェクトが用意されているので、それを使ってみます。C#です。

Managed Extensibility and Add-In Framework - Release: Sample- Blank Pipeline Project

 コントラクトはひとつのメソッドを持ってます。

namespace Sample.Blank.Contracts
{
    [AddInContract]
    public interface ISampleAddInContract : IContract
    {
        void DoStuff();
    }
}

  サンプルプロジェクトでは既に設定されていますが、コントラクトは出力すべきフォルダ名が決まっています。プロジェクトのプロパティを確認するとわかりますが、..\output\Contracts が出力先になってます。

 Pipeline Builderはコードからコードを生成するのではなく、アセンブリからコードを生成してくれます。よってビルドしておきましょう。

 次にツールメニューから「Pipeline Builder」を選択します。次のようなウィンドウが表示されます。あらかじめ値が設定されていてサンプルの場合は変更する必要がないです。上から順に、コントラクトのプロジェクト、生成するプロジェクトの出力先、ビルド先です。

PipelineConfiguration

 OKボタンを押すと、ソリューションにプロジェクトが追加されると思います。これは便利ー。というかこうあるべきですね。

Blank Pipeline Projects

 コントラクト以外に必要なものは、アドインビュー、アドイン側アダプター、ホスト側アダプター、ホストビューです。生成されたのプロジェクトは3個。基本的にアドインビューとホストビューは同じものを記述するので1個のビューとして出力されたようです。なるほど!

 ここらへんの設定は、コントラクタ内の属性でカスタマイズできるようですね。

posted @ 21:32 | Feedback (3)