.NET TIPS

GACコンポーネントをClickOnceで配布するには?[VS 2005のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2006/07/14


ClickOnceの真実 第3回 Visual Studio 2005でClickOnceを極めよう

 .NET Framework 2.0では、ClickOnceというアプリケーションを配布・更新するための機能が追加された。このClickOnceによりアプリケーションを配布するには、Visual Studio 2005(以降、VS 2005)のIDEが非常に便利だ。VS 2005を使えば、そのIDEの発行機能によりClickOnceで配布すべきファイルを自動的に選択してくれるからだ。

 しかし、配布すべきコンポーネントがGAC(グローバル・アセンブリ・キャッシュ)にインストールされている場合*1、VS 2005の発行機能はこれを自動的には配布するようにしてくれない。このような動作となるのは、(暗黙的に)GAC内のコンポーネントはクライアント環境にも事前にGACにインストールされているものとして取り扱われるためだ。

*1 例えばサードパーティのコンポーネントを利用する場合では、配布すべきコンポーネントがGACにインストールされていることが多い。

 そこで、このようなGACにインストールされている.DLLファイル(以降、GACコンポーネント)をVS 2005の発行機能を使ってClickOnceで配布されるようにするには、何らかの設定を手動で行う必要がある。その設定方法には、次の2通りがある。

  1. GACコンポーネントの「参照設定」の内容を変更する
  2. GACコンポーネントの「発行方法」の内容を変更する

 本稿ではこれらの方法について解説する。なお本稿の内容は、VS 2005の発行機能を使うことを前提とする。

VS 2005のClickOnce発行機能におけるGACコンポーネントの取り扱い

 先ほども述べたように、VS 2005ではGACコンポーネントは自動的に配布対象のアプリケーション・ファイルとして取り扱われないわけだが、具体的にどのような設定内容になっているのかをまずは説明しておこう。

 VS 2005では、GACコンポーネントに対して参照設定が追加されている場合、その.DLLファイルの発行方法(=アプリケーション・ファイルの[発行の状況]の設定内容)を自動的に(アプリケーション・ファイルとしての)「必須コンポーネント」*2に設定する。「必須コンポーネント」に設定されたアプリケーション・ファイルは、クライアント環境でのClickOnceアプリケーションの実行に不可欠なファイルとして認識されるが、ClickOnce機能はこれを配布しない。

*2 ここでいう「アプリケーション・ファイルとしての必須コンポーネント」とは、アプリケーションが参照しているコンポーネントという意味である。アプリケーションを実行するための前提要件となるモジュール(例えば.NET Framework 2.0」など)をインストールするための機能(=ブートストラッパ:Bootstrapper)も同じく「必須コンポーネント」と呼ばれるが、両者は完全に別物なので注意してほしい。なお通常は、必須コンポーネントといえば後者の「ブートストラッパとしての必須コンポーネント」を指す。

 従って、VS 2005の発行機能でGACコンポーネントが配布されるようにするには、この(アプリケーション・ファイルとしての)「必須コンポーネント」の設定を、「追加」に変更すればよいわけだ。なおここでいう「追加」とは、ClickOnceで配布するアプリケーション・ファイルとして設定するという意味である。

1. GACコンポーネントの「参照設定」の内容を変更する

 その1つ目の方法は、VS 2005のIDEでGACコンポーネントを常にローカルにコピーするように設定するというものだ。この設定により、(ClickOnceアプリケーションとなる).EXEファイルが生成される出力フォルダ内に、そのGACコンポーネントがビルドのたびにコピーされるようになる。このため、VS 2005の発行機能はそのコピーされたGACコンポーネントを(ハードディスク上の参照コンポーネントと同じように)配布すべきファイル(=「追加」)として取り扱うようになるわけである。

 次の画面はこれを実際に行っているところだ。

VS 2005でGACコンポーネントをローカルにコピーするように設定する例
この設定を行うだけで、GACコンポーネントは自動的に配布されるようになる。
  [ソリューション エクスプローラ]ウィンドウの「参照設定」に追加されているGACコンポーネント(この例では「ActiveReports」「ActiveReports.Chart」「ActiveReports.Viewer」)を選択する。
  [プロパティ]ウィンドウの[ローカル コピー]プロパティを「True」に変更する。

 上記の画面の設定により、実際にGACコンポーネントの.DLLファイルの配布設定(=[発行の状況])がどのように変化したかを、次の画面で示す。

[アプリケーション ファイル]ボタンをクリック
 GACコンポーネントの[ローカル コピー]が「False」の場合:
 GACコンポーネントの[ローカル コピー]が「True」の場合:
[ローカル コピー]の設定の違いによるGACコンポーネント[発行の状況]の相違
GACコンポーネントの[ローカル コピー]が「False」の場合、各GACコンポーネント(この例では「ActiveReports.Chart.dll」「ActiveReports.dll」「ActiveReports.Viewer.dll」)の[発行の状況]は、「必須コンポーネント」に設定される(「(自動)」という表記は自動的に設定したという意味)。しかし[ローカル コピー]が「True」の場合には、これが「追加」に設定される。これにより、GACコンポーネントが自動的に配布されるようになるわけである。
  プロジェクトのプロパティを表示し、その[発行]タブを開く。
  [アプリケーション ファイル]ボタンをクリックする。これにより、[アプリケーション ファイル]ダイアログが表示される。このダイアログは、ClickOnceで配布するファイルを設定するためのものだ。

2. GACコンポーネントの「発行方法」の内容を変更する

 もう1つの方法が、[アプリケーション ファイル]の[発行の状況]の設定内容を、「必須コンポーネント」から「追加」に手動で変更することである。

 次の画面はこれを実際に行っているところだ。

GACコンポーネントの発行方法の変更
[アプリケーション ファイル]ダイアログの[発行の状況]を「必須ファイル」から「追加」に変更することで、GACコンポーネントがクライアント環境に配布されるようになる。
  [アプリケーション ファイル]ダイアログのグリッド表に、アプリケーションが参照しているコンポーネント(=プロジェクトで参照設定に追加したコンポーネント)が列挙されるが、GACコンポーネントは「必須コンポーネント (自動)」に設定されているので、これを「追加」に変更する。

 以上の設定を行った後、実際にClickOnceアプリケーションを発行するとGACコンポーネントがクライアントに配布されるはずだ。

GACコンポーネントのサテライト・アセンブリの配布

 なお、多言語対応アプリケーションのすべてのサテライト・アセンブリ(=「言語-カルチャ」別のリソース・ファイル。参考:「TIPS:Windowsフォームを多言語対応にするには?」)は、[アプリケーション ファイル]の[発行の状況]が「除外」に設定されるために自動的な配布はなされない。この動作は、GACコンポーネントの[ローカル コピー]プロパティを「True」に指定しても変わらない。

 GACコンポーネントのサテライト・アセンブリも配布しなければならない場合、それらのアプリケーション・ファイルは「TIPS:多言語対応アプリケーションをClickOnceで配布するには?」と同様の手順で、手動で設定する必要がある。End of Article

カテゴリ:Windowsフォーム 処理対象:ClickOnce
関連TIPS:Windowsフォームを多言語対応にするには?
関連TIPS:多言語対応アプリケーションをClickOnceで配布するには?

この記事と関連性の高い別の.NET TIPS
多言語対応アプリケーションをClickOnceで配布するには?
.MSIセットアップで必須コンポーネントを利用するには?
ClickOnceアプリをコマンドラインから発行するには?
[参照の追加]ダイアログに独自のアセンブリを表示するには?
GAC(グローバル・アセンブリ・キャッシュ)の内容をエクスプローラで通常表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間