ASP.NET Web アプリケーション プロジェクトの配置の概要

Visual Studio 2010 で ASP.NET Web アプリケーション プロジェクトまたは ASP.NET Web サイト プロジェクトを作成した後は、一般的に、他のユーザーがアプリケーションにアクセスできる Web サーバーにそのプロジェクトを配置します。 通常、配置には、アプリケーションのファイルをあるサーバーから別のサーバーにコピーする以外の作業を伴います。 また、場合によっては次のように追加のタスクを実行する必要があります。

  • デバッグ設定やデータベース接続文字列設定など、配置先環境によって異なる Web.config ファイルの設定を変更する。

  • Web アプリケーションで使用されるデータベースのデータまたはデータ構造を反映する。

  • 配置先コンピューターで IIS 設定を構成する。たとえば、アプリケーション プール、認証方法、ディレクトリの参照の可否、エラー処理などを構成します。

  • セキュリティ証明書をインストールする。

  • 配置先コンピューターのレジストリ値を設定する。

  • 配置先コンピューターのグローバル アセンブリ キャッシュ (GAC: global assembly cache) にアプリケーション アセンブリをインストールする。

Web 配置という名前の Microsoft Internet Information Services (IIS) の拡張機能を使用すると、ほとんどの配置タスクを自動化できます。 Visual Studio には、Web アプリケーション プロジェクトを簡単に配置できるようにするための Web 配置で使用できるツールが用意されています。

注意

このトピックは、Web アプリケーション プロジェクト テンプレートを使用して作成される Web アプリケーションを対象としています。Web アプリケーションは、Web サイト プロジェクト テンプレートを使用して作成することもできます。Web サイト プロジェクトを配置する方法については、「ASP.NET Web サイト プロジェクトの配置の概要」を参照してください。

このトピックは、次のセクションで構成されています。

  • Web 配置パッケージ

  • ワンクリック発行

  • エンタープライズ シナリオ

  • サードパーティでのホスト シナリオ

  • Web.config ファイルの変換

  • SQL Server データベースの配置

  • Web 発行パイプラインの拡張

この概要で説明するトピックの詳細については、「ASP.NET 配置のコンテンツ マップ」を参照してください。

Web 配置パッケージ

Visual Studio を使用して Web 配置パッケージを作成し、そのパッケージを配置先サーバーにインストールして、Web アプリケーション プロジェクトを配置できます。 配置パッケージは圧縮 (.zip) ファイルであり、このファイルには IIS でアプリケーションをセットアップし、これにアプリケーション ファイルをコピーし、データベースなどの関連リソースをセットアップするために必要な情報が含まれています。

配置パッケージの作成とインストールは別個のプロセスとして実行できます。 または、ワンクリック発行を使用して、リモートから 1 ステップで配置することもできます。 (既定では、ワンクリック発行ではパッケージは作成されませんが、必要に応じてパッケージを作成するように指定できます。)

アプリケーションのソース ファイルとバイナリ ファイルだけでなく、通常は次のような情報を含むファイルも配置パッケージに含まれます。

  • アプリケーション プール、認証方法、ディレクトリの参照の可否、エラー処理などの IIS 設定。

  • 変更をデータベースのデータまたはデータベース構造に反映させるために使用するデータベース スクリプト。

  • デバッグ設定や接続文字列設定など、パッケージをインストールするときに変更が必要となる可能性がある値を含んでいるパラメーター。

Visual Studio パッケージ作成プロセスには拡張性があります。 パッケージに含める可能性があるが、カスタム拡張機能を必要とする情報の例は、次のとおりです。

  • セキュリティ証明書。

  • Windows レジストリ設定。

  • 配置先コンピューターの GAC にインストールする必要があるアセンブリ (.dll ファイル)。

配置パッケージに含める内容の指定

Visual Studio では、配置パッケージに含める内容を指定するときに、プロジェクトのプロパティ ページの [Web のパッケージ化/発行] タブの設定を使用します。 次の図は、[Web のパッケージ化/発行] タブを示しています。

[パッケージ化/発行] ダイアログ ボックス

パッケージ作成に影響を与えるデータベース関連の設定は [SQL のパッケージ化/発行] タブで行います。これについてはこのトピックで後述します。

これらの 2 つのタブを使用して、使用頻度の高い設定を更新します。 使用頻度の低いその他の設定は Visual Studio プロジェクト ファイル (.csproj または .vbproj) に格納され、そのファイルを直接編集して変更できます。

配置パッケージの作成

パッケージは次の方法で作成できます。

  • Visual Studio のツールを使用する。

  • コマンド ラインから MSBuild コマンドを直接使用する。

  • PowerShell またはチーム ビルドから MSBuild コマンドを間接的に使用する。

配置パッケージのインストール

配置パッケージを作成したら、配置先コンピューターにこれをインストールします。 Web 配置は、パッケージ内の情報を使用して、IIS の構成、データベースのセットアップ、フォルダー構造の作成とそれらへのファイルのコピー、およびアプリケーションの配置に必要なその他の作業を実行します。

パッケージは、次のいずれかの方法でインストールできます。

  • コマンド ラインから Web 配置を使用する。

  • パッケージをインストールする Web 配置コマンドを含む、Visual Studio で作成した .cmd ファイルを使用する。 Web 配置コマンドが長く複雑なため、コマンド ラインからのパッケージのインストールを簡単にするためにこのファイルが用意されています。

  • IIS マネージャーを使用する。

  • PowerShell を使用して Web 配置コマンドを実行する。

作成時に、パッケージにパラメーターを含めることができます。 これらは、パッケージを作成するときに既定値を指定するが、パッケージのインストール時に新しい値を指定できる、名前と値の組です。 パッケージのインストールに IIS マネージャーを使用する場合は、新しい値を入力できるように、テキスト ボックスにパラメーター名が表示されます。 インストールにコマンド ラインから Web 配置を使用する場合は、XML ファイルにパラメーター値を指定できます。

パッケージ フォルダーの場所と内容

既定では、Visual Studio は MSBuild IntermediateOutputPath プロパティで指定されるフォルダーに配置パッケージを生成します。 次の [ソリューション エクスプローラー] ウィンドウの図に示すように、IntermediateOutputPath プロパティは、プロジェクトの obj\Configuration フォルダーを参照します。

配置パッケージ ファイルが表示されたソリューション エクスプローラー

Configuration の定義済みの名前は、Debug (上の図を参照) および Release です。 追加のビルド構成を定義できます。

パッケージは、Package という名前のフォルダーに作成されます。 Package フォルダーには、次のファイルが含まれます。

  • <プロジェクト名>.zip。 このファイルは、実際の配置パッケージです。

  • <プロジェクト名>.deploy.cmd。 このファイルは、コマンド ラインからのパッケージのインストールを簡単にするために Web 配置を呼び出すコマンド ライン バッチ ファイルです。

  • <プロジェクト名>.SetParameters.xml。 このファイルには、deploy.cmd ファイルを使用してパッケージをインストールするときに Web 配置に渡されるパラメーターが含まれています。 各パラメーターには、Visual Studio のパッケージ設定で決められた既定値が指定されます。 たとえば、サーバーごとに異なる設定を使用して Web アプリケーションを複数のサーバーにインストールする場合は、これらの値を変更できます。

  • <プロジェクト名>.SourceManifest.xml。 このファイルには、Visual Studio によって Web 配置に渡され、Web 配置が Web パッケージの作成に使用する設定が含まれています。 Web 配置では、このファイルはパッケージ作成にのみ必要です。 パッケージのインストール時には使用されません。

パッケージを .zip ファイルとして作成しない場合は、.zip ファイルに格納されるはずのファイルは、Archive という名前のフォルダーに格納されます。 その場合、deploy.cmd、SetParameter.xml、および SourceManifest.xml のファイル名の最初のノードは <プロジェクト名> ではなく "Archive" です。

Visual Studio、Web 配置、およびこれらのファイルの相互関係を次の図に示します。

Visual Studio を使用して作成したパッケージ ファイルの配置

ワンクリック発行

Visual Studio のワンクリック発行機能を使用して、リモートで配置することもできます。 その場合、アプリケーションの配置方法と配置先を発行プロファイルに指定します。 次の図は、[発行プロファイル] ダイアログ ボックスを示しています。

[発行プロファイル] ダイアログ ボックス

ワンクリック発行を使用してアプリケーションをサードパーティのホスティング プロバイダーに配置する場合は、通常、ホスティング プロバイダーから [発行プロファイル] ダイアログ ボックスに必要な設定が提供されます。

発行設定を指定し終えたら、そのダイアログ ボックスまたは [Web のワンクリック発行] ツール バーの [発行] ボタンをクリックします。 Visual Studio によって、アプリケーションは配置先コンピューターに配置されます。 Web アプリケーション プロジェクトの配置後に [発行] ボタンをクリックすると、Visual Studio は変更された項目のみを再配置します。

複数のプロファイルを作成して、複数の異なるサーバーに、または設定を変えて同じサーバーに発行することができます。

エンタープライズ シナリオ

エンタープライズ環境では、通常、開発コンピューターから、テスト サーバーやステージング サーバーなど、1 つ以上の中間環境に配置します。 次に、いずれかの中間環境から稼働環境に配置します。

開発環境から初めて配置を行う場合は、一般的に次のようなシナリオが考えられます。

  • Visual Studio を使用して配置パッケージを作成し、手動でインストールします。

  • コマンド ライン プロセスを使用して、配置パッケージを作成およびインストールします。 これは、通常、MSBuild を使用してソース管理リポジトリからバッチ モードで実行します。

  • ワンクリック発行を使用します。 このオプションを使用できるのは、開発コンピューターから配置先環境にリモートでアクセスできる場合、選択した発行方法で配置先のコンピューターがセットアップされている場合、および配置先のコンピューターに対する適切なアクセス許可がある場合です。 既定では、ワンクリック発行ではパッケージは作成されません。 ただし、アーカイブまたはバックアップとして使用するためにパッケージを作成するよう指定できます。

ある環境から初期配置後の 2 回目の環境に配置する場合、初期配置用に作成したパッケージと同じパッケージを使用できます。 また、Web 配置を使用して、配置元のコンピューターに新しいパッケージを作成することもできます。

次の図は、いくつかの一般的なエンタープライズ シナリオを示しています。

エンタープライズにおける Web 配置の一般的なシナリオ

サードパーティでのホスト シナリオ

サードパーティのホスティング プロバイダーを使用し、開発コンピューターから直接ホスティング プロバイダーに配置する場合は、次のオプションがあります。

  • Visual Studio のワンクリック発行を使用します。

  • パッケージを作成し、IIS マネージャーを使用してリモートでインストールします。

ホスティング プロバイダーでは、アプリケーションは共有環境に配置されることも、専用サーバーに配置されることもあります。 共有環境にホストされるアプリケーションの場合、通常、利用者側はかなり限られた範囲でしか環境を構成できません。 たとえば、通常は、共有ホスティング環境では、IIS 設定を変更できません。

次の図は、いくつかの一般的なサードパーティのホスティングのシナリオを示しています。

サード パーティのホスティングによる一般的な配置シナリオ

Web.config ファイルの変換

Web.config ファイルには、通常、アプリケーションが実行される環境に応じて変える必要がある設定が含まれています。 たとえば、Web.config ファイルを配置先のサーバーに配置するときに、次のような変更を行う必要がある可能性があります。

  • 運用データベースを指すようにデータベース接続文字列を変更する。

  • 稼働環境でのデバッグを無効にする。

  • パッケージをコミュニティ サイトに提供する場合などに、接続文字列などの機密情報を削除する。

Web.config ファイルに対する変更を手動で管理するには、次の操作を実行します。

  • プロジェクトを配置するたびに、配置先サーバーで Web.config ファイルを編集します。

  • 環境ごとに個別の Web.config ファイルを維持し (個別のフォルダーや区別しやすい名前を使用するなど)、配置時には配置先環境に適したバージョンのみをコピーします。

  • XSLT ファイルを作成して、Web.config を変換し、アプリケーションの配置時に変換を適用します。

Web アプリケーション プロジェクトの場合は、配置時の Web.config ファイルの変更 (変換) プロセスを自動化するツールが ASP.NET に用意されています。 配置先の環境ごとに、その環境用の Web.config ファイルの差分のみを指定する変換ファイルを作成します。

変換ファイル名には、"Web" と "config" の間の追加のノードとして配置先環境の名前 (ビルド構成名) が含まれます。 たとえば、デバッグ ビルド構成の変換ファイルは Web.Debug.Config という名前です。 次の図に示すように、Visual Studio の [ソリューション エクスプローラー] ウィンドウでは、Web.config ファイルの下にこれらのファイルが自動的にグループ化されます。

Web.config 変換ファイルを使用したソリューション エクスプローラー

変換ファイルは、Web.config ファイルの変更方法を指定する XML ファイルです。 変換ファイルでは、配置用の Web.config ファイルの変換処理を目的とした XML 属性が使用されます。 たとえば、Web.config ファイルに次の接続文字列セクションがあるとします。

<connectionStrings>
  <add name="ApplicationServices"
      connectionString="[TestDatabase]" />
</connectionStrings>

次の変換ファイルは、Web アプリケーションが配置されるときに、ApplicationServices という名前の接続文字列が運用データベースを指すように自動的に変換されることを示しています。

<?xml version="1.0"?>
<configuration xmlns:xdt="https://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="ApplicationServices" 
        connectionString="[ProductionDatabase]" 
        xdt:Transform="Replace" xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>

この例では、Locator の属性値 Match(name) は、同じ名前 (ApplicationServices) を持つ add 要素のみを変更する必要があることを示しています。 Transform の属性値 Replace は、配置プロセスが add 要素全体を置換する必要があることを示しています。

SQL Server データベースの配置

SQL Server データベースを使用する Web アプリケーションを配置するときは、データ構造、データ、またはその両方を反映させる必要がある場合もあります。 Visual Studio では、配置先のデータベースでこの操作を行うスクリプト (.sql ファイル) を自動的に作成でき、これらのスクリプトを Web パッケージに含めることができます。 カスタムの SQL Server (.sql) スクリプトを追加して、スクリプトが実行される順序を指定することもできます。 Web 配置は、パッケージがインストールされる配置先サーバーでこれらのスクリプトを実行します。

SQL Server の配置オプションは、プロジェクトの [プロパティ] ページの [SQL のパッケージ化/発行] タブで指定します。 次の図は、[SQL のパッケージ化/発行] タブを示しています。

プロジェクト プロパティの [SQL のパッケージ化/発行] タブ

Web 発行パイプラインの拡張

Web 発行パイプライン (WPP) は、配置パッケージを作成するとき、またはワンクリック発行を使用するときに Visual Studio で使用されるプロセスです。 WPP での作業は、実際には MSBuild と Web 配置で実行されます。 これにより、Visual Studio でもコマンド ライン ツールでも、配置に同じ機能を使用できます。

WPP には、MSBuild の動作を制御する XML ファイルを変更することによって拡張できるタスクもあります。 たとえば、次のようなタスクは XML ファイルを変更して処理できます。

  • パッケージから特定の Web アプリケーション ファイルまたはフォルダーを除外する。

  • パッケージの作成前に Web アプリケーションをプリコンパイルする。

  • 配置先サーバーの GAC にアプリケーション アセンブリをインストールする。

  • 配置先サーバーのレジストリ キーを更新する。

  • 配置先サーバーに SSL 証明書をインストールする。

その他のタスクでは、MSBuild と Web 配置の両方を拡張する必要があります。 たとえば、Web アプリケーションで MSMQ を使用していて MSMQ 配置を自動化するとします。 この操作を行うには、Web 配置の MSMQ プロバイダーを作成し、MSBuild を制御するファイルを変更してそれを WPP に追加します。

Web 配置では、.NET Framework プロバイダー モデルを使用します。 配置を行うために管理する必要がある各情報は、プロバイダーによって処理されます。 たとえば、IIS 設定用のプロバイダー、SQL Server データベース用のプロバイダー、.html ファイルや .aspx ファイルなどの Web コンテンツ用のプロバイダーなどがあります。

Web 配置がパッケージを作成するときは、各プロバイダーを呼び出して、配置する Web アプリケーションに関する情報を収集します。 Web 配置はプロバイダーを呼び出して情報をシリアル化し、ファイルに格納します。 Web 配置がパッケージをインストールするとき、プロバイダーはパッケージ用に作成したファイルを読み取り、必要に応じて情報を逆シリアル化して、配置先環境に元の設定を再作成します。プロバイダーはインストール時のパラメーターを処理できる必要があります。 つまり、インストール時に IIS マネージャーの UI または Parameters.xml ファイルに指定された値を処理できる必要があります。

次の図は、Web アプリケーションの情報、Web 配置プロバイダー、Web 配置 API、配置パッケージ、およびパラメーター ファイルの間のデータのフローを示しています。 この図では、Parameters.xml はその役割を示すためにパッケージの .zip ファイルの横に表示されていますが、 実際には Parameters.xml はパッケージの .zip ファイルに含まれています。

開発用コンピューター

開発用コンピューター上の Web 配置プロバイダー

Web サーバー

発行先サーバー上の Web 配置プロバイダー

Web 配置には、Web アプリケーションに関連付けられている可能性のあるほとんどの種類のリソース用のプロバイダーが用意されています。 しかし、組み込みプロバイダーが使用の要件を満たさないときには、カスタム プロバイダーを記述できます。 利用できるプロバイダーの一覧については、Microsoft TechNet Web サイトの「Web 配置プロバイダー」を参照してください。

次の図は、Web 配置を使用してパッケージ化または発行を行うときの、WPP での一般的な手順を示しています。 ここには、次の手順を追加して拡張された WPP が示されています。

  • 指定されたファイルを除外する。

  • Web アプリケーションのプリコンパイルを行う。

  • GAC アセンブリ、COM アセンブリ、およびレジストリ キーを配置する。

  • SSL 証明書を配置する。

Web 発行パイプライン (WPP)

ワンクリック発行の使用、および Web 配置以外の方法の使用によって配置を行う場合は、次の図に示すように Web 配置に適用されない WPP の部分のみを拡張できます。

Web 配置を使用しない Web 発行パイプライン

特定のシナリオでの Web 発行パイプラインの拡張方法を説明した例については、Visual Web Developer Team blog (Visual Web Developer チーム ブログ) の次のエントリを参照してください。

参照

概念

ASP.NET 配置のコンテンツ マップ