Jenkins
VSTO

VSTOプロジェクトをコマンドラインでビルド(VS2013対応版)

More than 1 year has passed since last update.

はじめに

Visual Studio 2013 Update 5で作ったVSTO Addinのプロジェクトを、Jenkinsを使ってビルド/デプロイできるようにするために、まずビルドサーバ上で手動でコマンド実行してビルドができるようにしてみます。

以下の手順を参考にしました。
How to Build Visual Studio 2010 Office Development Projects with TFS Team Build 2010
https://msdn.microsoft.com/en-us/library/ff624126.aspx

これはTFSでVS2010のVSTOプロジェクトをビルドするための手順ですが、結局はVisual Studioがインストールされていないマシンでビルドできるようにするための手順ですので、今回の内容はこの記事のVS2013対応版という感じです。

ちなみに、私が実際に使用した環境は、ビルドサーバがWindows 7 64bitで、VS2013がインストールされた開発用マシンがWindows 7 32bitになります。

手順

MSBuild 2013のインストール

まずは、Visual StudioのビルドツールであるMSBuildの単体版をインストールします。
https://www.microsoft.com/ja-jp/download/details.aspx?id=40760

Windows 8.1 SDKのインストール

VS2013に対応するものはこのバージョンっぽいので、こちらをインストール。
https://developer.microsoft.com/ja-jp/windows/downloads/windows-8-1-sdk

Visual Studio 2010 Tools for Office Runtimeのインストール

2013版はなく、VS2013でも2010版でいいようなので、こちらをインストール。
https://www.microsoft.com/ja-JP/download/details.aspx?id=54251

Custom Build Tasks/Custom Build Targetsのコピー

VSTOプロジェクト固有のBuild Task/Targetを使えるようにするために、VS2013がインストールされているマシンから、以下のフォルダ/ファイルをビルドマシンの同じパスにコピーします。

  • %Windows%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.Tools.Applications.BuildTasks
  • %Windows%\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.Tools.Office.BuildTasks
  • %ProgramFiles%\MSBuild\Microsoft\VisualStudio\v12.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets →ビルドサーバの%ProgramFiles(x86)%の方にコピー

targetsの方ですが、おそらくMSBuildの単体版が初期リリースのままで、Update 3以降に対応していないことが原因で、ビルド実行時にSignFileタスクでTargetFrameworkVersionパラメータはサポートされていないというエラーが発生するため、コピー後SignFile要素の中からTargetFrameworkVersionパラメータを指定している行をすべて削除しておきます。

Visual Studio Tools for Office 2010 Runtime Reference Assembliesのコピー

こちらも単純にファイルコピーでOKです。
%ProgramFiles%\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA
→ビルドサーバの%ProgramFiles(x86)%の方にコピー

Bootstrapper Packagesのコピー

こちらも単純にファイルコピーでOKです。
%ProgramFiles%\Microsoft SDKs\Windows\v8.1A\Bootstrapper
→ビルドサーバの%ProgramFiles(x86)%の方にコピー

レジストリの追加

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v4.0.30319\AssemblyFoldersExに以下のサブキーを追加
- サブキー: VS11VSTOCommonPIA 既定のデータ: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Common\"
- サブキー: VS11VSTOOffice14PIA 既定のデータ: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office14\"
- サブキー: VS11VSTOOffice15PIA 既定のデータ: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\Office15\"
- サブキー: VSTO 4.0 Reference Assemblies 既定値: "C:\Program Files\Reference Assemblies\Microsoft\VSTO40\v4.0.Framework\"
キー名がVS12ではなくVS11ですが、VS2013をインストールしたマシンのキー名がこうなっていたので、同じように設定。

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\12.0というキーを作り、以下のデータを作成します。
- 名前: Path データ: "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\"

いずれの値も、前の手順でファイルをコピーしたパスを正しく設定します。

ビルドの実行

これで準備はOKなので、実際にビルドをしてみます。ビルドサーバにVisual Studioで作成したソリューションをフォルダごとコピーしてきます。そのフォルダ内で、MSBuildコマンドを実行します。

"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" /t:publish /p:PublishDir="c:\publish\\" /p:Configuration=Debug /p:Platform="Any CPU"

/t:publishをつけると、発行までいっきにできます。