Visual Studio 2010 : VSTO の配置の進化 (CTP 版) (2)
環境:
.NET Framework 4.0 Community Technology Preview (CTP)
Visual Studio 2010 Community Technology Preview (CTP)
-
-
-
こんにちは。
今回は、複数プロジェクトの配置についてです。
この機能ですが、下記で述べるように、CTP ではかなりの手作業が必要になっていますが、下記に述べる手順はあくまでも現 CTP 版における動作確認のための手順であり、最終的にどのような機能として実装されるかは未定ですのでご注意ください。(あくまでも、「マニフェストでどのように記述できるか」というイメージをつかんで頂くための紹介です)
機能の背景
VSTO は単純に「VBA に変わる機能」ではありません。その歴史に詳しい方はご存じの通り、作業ペイン、ClickOnce 配置など、VSTO はエンタープライズシステムを想定した企業内システムのクライアント開発の手段として存在しています。
例えば、企業内の案件管理をおこなう Office のシステム(もしくはアプリケーションパッケージ)を想像してみてください。こうした統合システムでは、Outlook で案件入力をおこなって送信し、データベースに溜まった案件情報を Excel を使ってピポッド集計するかもしれません。この例でもわかりますが、Outlook 用のアドイン、Excel 用のアドインと 2 つのアドインが必要になってくるでしょう。つまり、現実の統合システムでは、アドイン機能を Excel 用、Outlook 用など個別にインストールするのではなく、こうした複数のプロジェクトを 1 パックにして統合パッケージとして同時に配置することが必要となってきます。
これまでの VSTO では、ClickOnce によりこうした手段を提供することができませんでした。
動作確認
では、実際に動作を確認してみましょう。上記でも述べましたが、まだ機能のベースが存在しているのみですので、今回は、すべて手作業で実施 しています (これが機能の最終形ではありません)。よって、今回の設定方法はおぼえておいても意味がありませんが、内部の動きと仕組み (何がどのように拡張されているか) を理解しておくという意味で重要です。
まず、サンプルとして、2 つのアドインプロジェクトを作成してみましょう。今回は「ExcelAddIn1」という名称の [Excel 2007 AddIn] プロジェクトと、「WordAdddIn1」という名称の [Word 2007 AddIn] プロジェクトを作成し、簡単に実装/ビルドをおこない (例:カスタムのリボンを表示するアプリ、など)、それぞれのプロジェクトを共有フォルダなどに発行してください。
今回は、発行された WordAddIn1 のアプリケーションマニフェスト (WordAddIn1.dll.manifest) を以下のように手作業で編集し、ExcelAddIn1 も同時に配布できるように変更してみましょう。(変更後のマニフェストを下記に掲載しておきます)
-
ここは必要ないかもしれませんが (きっと、後述する mage コマンドが自動化してくれます) 、念のため、最後の <publisherIdentity> 要素以降を削除しておきましょう。(但し、最後の </asmv1:assembly> は削除しないようにしましょう。)
ここには署名が記載されていますが、後ほど手作業で sign をおこないます。
-
ExcelAddIn1.dll.manifest から、<dependency> 要素の中にある ExcelAddIn1 の <dependentAssembly> 要素の記述を コピーして、WordAddIn1.dll.manifest の該当箇所に追加します。(今回のサンプルでは、ExcelAddIn1.dll だけですが、使用しているその他のビジネスロジックがある場合には、依存している dll をすべて追加しておく必要があります。)
この箇所は、.NET Framework 4.0 の新機能ではなく、従来のマニフェストでも同様の設定が可能です。
-
ExcelAddIn1.dll.manifest から、<vstav3:entryPoints> の要素の記述部分をコピーし、WordAddIn1.dll.manifest の該当箇所に追加します。さらに、一意な id 属性をWordAddIn1 の <vstav3:entryPoints> と ExcelAddIn1 の <vstav3:entryPoints> に付与します。(下記)
.NET Framework 4.0 の VSTO のマニフェストでは、このように、複数のエントリを追加することが可能になっています。
<vstav3:entryPointsCollection>
<vstav3:entryPoints id="WordAddIn1">
<vstav3:entryPoint class="WordAddIn1.ThisAddIn">
<assemblyIdentity name="WordAddIn1" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
</vstav3:entryPoint>
</vstav3:entryPoints>
<vstav3:entryPoints id="ExcelAddIn1">
<vstav3:entryPoint class="ExcelAddIn1.ThisAddIn">
<assemblyIdentity name="ExcelAddIn1" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
</vstav3:entryPoint>
</vstav3:entryPoints>
</vstav3:entryPointsCollection>
-
同様に、<vstov4:customization> を ExcelAddIn1.dll.manifest からコピーして WordAddIn1.dll.manifest に追加し、上記のように、id 属性を WordAddIn1 と ExcelAddIn1 の双方の <vstov4:customization> に設定します。
変更後のマニフェストは、以下の通りになるでしょう。(太字は追加された箇所です)
<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly . . .>
. . . . . 途中省略
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="WordAddIn1.dll" size="11776">
<assemblyIdentity name="WordAddIn1" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>VLuF0BNRVYAuRd6ue8vnRkXVatM=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="ExcelAddIn1.dll" size="11776">
<assemblyIdentity name="ExcelAddIn1" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<dsig:DigestValue>/XH0EXnBk2x6Qyt701Wqh0ka2Do=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<vstav3:addIn xmlns:vstav3="urn:schemas-microsoft-com:vsta.v3">
<vstav3:entryPointsCollection>
<vstav3:entryPoints id="WordAddIn1">
<vstav3:entryPoint class="WordAddIn1.ThisAddIn">
<assemblyIdentity name="WordAddIn1" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
</vstav3:entryPoint>
</vstav3:entryPoints>
<vstav3:entryPoints id="ExcelAddIn1">
<vstav3:entryPoint class="ExcelAddIn1.ThisAddIn">
<assemblyIdentity name="ExcelAddIn1" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
</vstav3:entryPoint>
</vstav3:entryPoints>
</vstav3:entryPointsCollection>
<vstav3:update enabled="true">
<vstav3:expiration maximumAge="7" unit="days" />
</vstav3:update>
<vstav3:application>
<vstov4:customizations xmlns:vstov4="urn:schemas-microsoft-com:vsto.v4">
<vstov4:customization id="WordAddIn1">
<vstov4:appAddIn application="Word" loadBehavior="3" keyName="WordAddIn1">
<vstov4:friendlyName>WordAddIn1</vstov4:friendlyName>
<vstov4:description>WordAddIn1 - Word add-in created with Visual Studio Tools for Office</vstov4:description>
</vstov4:appAddIn>
</vstov4:customization>
<vstov4:customization id="ExcelAddIn1">
<vstov4:appAddIn application="Excel" loadBehavior="3" keyName="ExcelAddIn1">
<vstov4:friendlyName>ExcelAddIn1</vstov4:friendlyName>
<vstov4:description>ExcelAddIn1 - Excel add-in created with Visual Studio Tools for Office</vstov4:description>
</vstov4:appAddIn>
</vstov4:customization>
</vstov4:customizations>
</vstav3:application>
</vstav3:addIn>
</asmv1:assembly>
ExcelAddIn1.dll.deploy (このファイルの実体はdll本体です) を WordAddIn のアプリケーションフォルダ (WordAddIn1_1_0_0_0) にコピーしておきます。
最後に、Visual Studio コマンドプロンプトなどを起動し、.NET Framework SDK の mage コマンドを以下の通り実行し、マニフェストと署名を再設定します。
Mage -sign "Application Files\WordAddIn1_1_0_0_0\WordAddIn1.dll.manifest" -Certfile C:\Demo\MultiProjectSample\WordAddIn1\WordAddIn1_TemporaryKey.pfx
Mage -update WordAddIn1.vsto -AppManifest "Application Files\WordAddIn1_1_0_0_0\WordAddIn1.dll.manifest"
Mage -sign WordAddIn1.vsto -CertFile C:\Demo\MultiProjectSample\WordAddIn1\WordAddIn1_TemporaryKey.pfx
発行先のディレクトリ (トップ) の WordAddIn1.vsto をクリックすると、ClickOnce のインストーラーにより、Excel のアドインも一緒にインストールされます。(無論、アンインストールをおこなうと、一緒にアンインストールされます。)
ここでは手作業による設定をおこないましたが (この手段はあくまでも暫定的なものです)、CTP には、既に、複数の VSTO アプリケーションの配置のための仕組み (.NET Framework 4.0 のマニフェストの新仕様) が備わっていることがおわかり頂けるでしょう。