プライマリ相互運用アセンブリ
プライマリ相互運用アセンブリとは?
プライマリ相互運用アセンブリとは、Microsoft Office アプリケーションのCOMベースのオブジェクトモデルと、.NET Frameworkのマネージドコードを相互運用出来るように橋渡しをしてくれるアセンブリの総称です。
VSTOでアプリケーションを開発するためには、無くてはならないものです。
.NET Framework 3.5がインストールされた環境で、Officeをフルインストールすると、プライマリ相互運用アセンブリもインストールされるようです。
また、Microsoftのサイトからダウンロード、インストールが可能です。
プライマリ相互運用アセンブリを必須コンポーネントに追加する
VSTOを使用して作成されたアプリケーションを配布する場合、.NET Framework等の必須コンポーネントも同様にインストールする必要があります。具体的には、以下のようなダイアログから、インストールが必要な必須コンポーネントを選択することになります。
しかしながら、現時点では、プライマリ相互運用アセンブリは必須コンポーネントの一覧には含まれていないため、上記ダイアログの一覧には出てきません。この問題を解消するため、プライマリ相互運用アセンブリを必須コンポーネントに追加する方法を示します。
Bootstrapper Manifest Generator
必須コンポーネントを作成するには、以下が必要になります。
プライマリ相互運用アセンブリの再配布可能コンポーネントは入手可能であるため、各種マニフェストファイルのみ用意すればよいことになります。全てを手入力することも可能ですが、ここでは、Bootstrapper Manifest Generatorという、非公式ながら、フリーのツールを利用して、マニフェストファイルの作成を行います。また、本ツールは、Visual Studio 2005対応ですが、上記のマニフェストファイルの構造はVisual Studio 2008と同等と思われるため、問題はないと考えています。
マニフェストファイルの作成
まず、Bootstrapper Manifest Generatorをインストールし、起動します。アプリケーションへのショートカットは、スタートメニューのVisual Studio 2005フォルダの下にあります。
起動後に、[New Project]アイコンを押すと、以下のようなダイアログが表示されます。
Package Manifestを選択します。すると、以下のような設定画面が表示されます。
ここではまず、プロジェクト名を「PrimaryInteropAssemblies」に、プロダクトコードを「Microsoft.PrimaryInteropAssemblies」に設定します。
プライマリ相互運用アセンブリのインストールには.NET Framework 1.1以降が必要になるため、.NET Frameworkの後にインストールが行われるように、依存関係を設定しておきます。
Related Packagesタブ上の[Add]をクリックし、Depends Onを選択してから、Product Codeに「Microsoft.Net.Framework.3.5」*1と入力します。
次に、インストールするファイルを追加します。[AddFile]アイコンをクリックすると、以下のダイアログが表示されますので、プライマリ相互運用アセンブリのインストーラー(o2007pia.msi)を指定します。
インストールファイルを追加すると、設定画面が以下のように表示されます。
まずは、Display Nameを設定します。ここでは、「PrimaryInteropAssembly」とします。
次にLicense Agreement Fileに、プライマリ相互運用アセンブリのライセンスファイル(eula.txt)を指定します。
ここで、[Exit Codes]タブに切り替えます。
Use Default System Exit Codesにチェックが入っていることを確認し、Result欄をSuccessに変更します。
これで設定は完了です。[Build]アイコンをクリックすると、必須コンポーネントの生成が行われます。冒頭にも書きましたが、Bootstrapper Manifest Generator はVisual Studio 2005にのみ対応しているため、Visual Studio 2005の必須コンポーネントが格納されているディレクトリ*2に出力されます。出力されるディレクトリの名前は、Display Nameである「PrimaryInteropAssembly」が使用されます。
Visual Studio 2008にBootStrapperを追加する
前節で出力された必須コンポーネント「PrimaryInteropAssembly」を、Visual Studio 2008で使用するためには、出力されたディレクトリ「PrimaryInteropAssembly」を、Visual Studio 2008の必須コンポーネントが格納されているディレクトリ*3にコピーする必要があります。
*1:.NET Framework 3.5の製品マニフェスト(C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\DotNetFX35\product.xml)のProductタグのProductCode属性に記述されています。
*2:C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages
*3:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages