ClickOnceの必須コンポーネントの警告マーク解消方法


# はじめに
帳票設計ソフト「Crystal Reports Basic for Visual Studio 2008」を使った自社開発のアプリケーションをClickOnceを使って配布しているが、Crystal ReportがインストールされていないPCでは下記のエラーが発生するとの報告があった。
「このアプリケーションをインストールまたは実行できません。
このアプリケーションでは、まずグローバルアセンブリキャッシュ(GAC)に
アセンブリ CrystalDecisions.ReportAppServer.XmlSerializeバージョン
10.5.3700.0 をインストールする必要があります。
システム管理者に問い合わせてください。」

まだ、社内での報告だったので事なきを得た。

# 原因
アプリケーションの改修作業があった際に新しいPC(Windows 7 Professional 64bit)上のVisual Studio 2015を使用してClickOnceで発行したが、必須コンポーネント「Crystal Reports Basic for Visual Studio 2008 (x86 x64)」にて「必要なブートストラップが見つかりません。」の警告になっていることに気が付かないまま発行したことによる。
前のプロジェクトで問題なかったので、「必須コンポーネント」ボタンを押してまで確認しなかったのと、警告だからエラーにならずに発行できてしまったのよね。
Visual Studio 2008は、新しいPCには不要と思ったのでインストールしてなかった。

# 対応
新しいPCにVisual Studio 2008をインストールして、ClickOnceを発行し直しましたってことではブログを書く意味がありませんよね。

そうではなく、Visual Studio 2015を使用してClickOnceを発行するわけですが、必須コンポーネントで「必要なブートストラップが見つかりません。」の警告を解消する方法があるわけです。

参考サイト

  * [Visual Studio 2013 で SQL Server Compact がサポートされない問題に対応](http://tech.surviveplus.net/archives/1022)
  * [VS2013　と　SQL Server Compact 4.0 SP1](http://sumurai993.hatenablog.com/entry/2014/03/06/075522)

## 解消方法
必須コンポーネントの「CryastalReports10_5」と「.NET Framewaork 2.0 (x86)」と「Crystal Reports Basic for Visual Studio 2008 (x86, x64)」に警告マークが付いています。
![ClickOnce1.png](https://qiita-image-store.s3.amazonaws.com/0/14053/50055c7e-763d-a72f-6bc1-f4ff1e7f22c9.png)

Visual Studio 2008のブートストラップのパッケージが下記フォルダにあります。
C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages
「CryastalReports10_5」と「DotNetFX(.NET2.0)」を選択します。
必要なら「WindowInstaller3_1」も選択して下さい。。
![ClickOnce4.png](https://qiita-image-store.s3.amazonaws.com/0/14053/3c778286-2aae-d5de-8cdd-f596ac56500e.png)

選択したフォルダを、Visual Studio 2015のブートストラップのパッケージの下記フォルダにコピーします。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages
![ClickOnce3.png](https://qiita-image-store.s3.amazonaws.com/0/14053/126c6b7e-cd77-02b2-37a0-9ea321840a06.png)

これにより警告マークが解消されます。
![ClickOnce21.png](https://qiita-image-store.s3.amazonaws.com/0/14053/6d93feac-e6ff-37e0-4679-6df871d504aa.png)

# Crystal Reportsについて
帳票設計ソフトのことでクリスタルレポートを略称して「クリレポ」と呼ばれる。
VS2008までCrystal ReportsのOEMバージョンが統合されていたが、VS2010以降は標準バンドルが廃止となっている。VS2010以降は無償アドオンを[SAPのサイトからダウンロード](http://scn.sap.com/docs/DOC-7824)してインストールすれば使用できます。

## 愚痴
自社開発のアプリケーションでは、Crystal Reportsを「必須コンポーネントをコンポーネント先の開発元のWebサイトからダウンロードする」としてClickOnceで発行しており、ユーザーから導入依頼が2014/11/01にあった際にはダウンロード出来たのですが、年が開けた2015/01/30にユーザーからインストールしたらエラーが出るとの問い合わせがあり、調べたらダウンロード先がアクセス不能となっていました。
 「ttp://resources.businessobjects.com/support/downloads/redistributables/vs_2008/redist/x86/CRRedist2008_x86.msi」
ClickOnceってリンク先が編集できないんですよね、ダウンロード先もエラーログから取得したものです。
 
時が経てば無くなるのは仕方ないですので、開発元のWebサイトからダウンロードするのは諦めて、「アプリケーションと同じ場所から必須コンポーネントをダウンロードする」に切り替えました。
 
最新版のCrystal Reportsにバージョンアップするのは、テストなど余分なコストがかかるしね。

## 64bitOSで32bit版Crystal Reportsインストール
【2018/06/27追記】
64bitOSではOLEDB4.0が使えないため、mdbを操作する場合はAnyCPUではなくx86(32bit)としたい。ところが、ClickOnceによるCrystal Reportsのインストーラーはプラットフォームを自動判断して64bit版をインストールしてしまう。
すると印刷処理しようとしたところで「Crystal Reports ランタイムが正しくインストールされていない可能性があります。」旨のエラー画面が表示される。

対処方法として、裏ワザ的ですがVisual Studio 2015のCrystalReports10_5のブートストラップにて、product.xml を編集してx86のみインストールされるようにした。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages\CrystalReports10_5

CRRedist2008_x64.msi 関連項目を全て削除した上で、x86にある下記項目も削除した。

```xml:product.xml
<!-- ByPass if the Processor is not x86 -->
<BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="Intel"/>
```


参考サイト

* [64bitPCでのクリレポのエラー（ロードエラー）](http://bbs.wankuma.com/index.cgi?mode=al2&namber=59447&KLOG=100)
* [64ビットのPCに32ビット版のCrystal Reportsのランタイムをインストールさせる方法](https://tamasaburou1982.tumblr.com/post/94877307358/64%E3%83%93%E3%83%83%E3%83%88%E3%81%AEpc%E3%81%AB32%E3%83%93%E3%83%83%E3%83%88%E7%89%88%E3%81%AEcrystal-reports%E3%81%AE%E3%83%A9%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%95%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95)