Visual Studio または Visual Web Developer を使用した SQL Server Compact を含む ASP.NET Web アプリケーションの配置: Web.Config ファイル変換 - 3/12

著者: Tom Dykstra

スターター プロジェクトのダウンロード

このチュートリアル シリーズでは、Visual Studio 2012 RC または Visual Studio Express 2012 RC for Web を使用して、SQL Server Compact データベースを含む ASP.NET Web アプリケーション プロジェクトを、配置 (発行) する方法について説明します。 Web 発行の更新をインストールすれば、Visual Studio 2010 を使用することもできます。 シリーズの概要については、シリーズの最初のチュートリアルを参照してください。

Visual Studio 2012 の RC リリース以降に導入された配置機能の紹介や、SQL Server Compact 以外の SQL Server エディションの配置方法、Azure App Service Web Apps への配置方法などを解説したチュートリアルは、「Visual Studio を使用した ASP.NET Web 配置」をご覧ください。

概要

このチュートリアルでは、別の配置先の環境に配置するときに Web.config ファイルを変更するプロセスを自動化する方法について説明します。 ほとんどのアプリケーションには、Web.config ファイルに、アプリケーションが配置時に変更する必要がある設定があります。 このような変更を行うプロセスを自動化すると、配置するたびに手動で面倒なミスが発生しやすい作業を行う必要がなくなります。

リマインダー: チュートリアルを進めていて、エラー メッセージが表示される場合や、うまくいかない場合は、必ずトラブルシューティングのページをご確認ください。

Web.config 変換と Web 配置パラメーターの比較

Web.config ファイルの設定を変更するプロセスを自動化するには、Web.config 変換Web 配置パラメーターの 2 つの方法があります。 Web.config 変換ファイルには、配置時に Web.config ファイルを変更する方法を指定する XML マークアップが含まれています。 特定のビルド構成と特定の発行プロファイルに対して、さまざまな変更を指定できます。 既定のビルド構成はビルドとリリースですが、カスタム ビルド構成を作成することもできます。 発行プロファイルは通常、配置先の環境に対応します。 (発行プロファイルの詳細については、「テスト環境としての IIS への配置」チュートリアルを参照してください。)

Web 配置パラメーターは、配置時に構成する必要があるさまざまな種類の設定 (Web.config ファイル内の設定など) を指定するために使用できます。 Web.config ファイルの変更を指定するために使用する場合、Web 配置パラメーターの設定がより複雑になりますが、配置するまで設定する値がわからない場合に便利です。 たとえば、エンタープライズ環境では、展開パッケージを作成し、運用環境にインストールするように IT 部門の担当者に渡す場合がありますが、その担当者は、あなたが知らない接続文字列やパスワードを入力できる必要があります。

このチュートリアルで説明するシナリオでは、Web.config ファイルに対して行う必要があることはすべて把握しているため、Web 配置パラメーターを使用する必要はありません。 使用するビルド構成によって異なる変換と、使用する発行プロファイルによって異なる変換を構成します。

発行プロファイルの変換ファイルの作成

ソリューション エクスプローラーで、Web.config を展開して、2 つの既定のビルド構成用に既定で作成された Web.Debug.config 変換ファイルと Web.Release.config 変換ファイルを確認します。

Web.config_transform_files

カスタム ビルド構成の変換ファイルは、Web.config ファイルを右クリックし、コンテキスト メニューから [構成変換の追加] を選択すると作成できますが、このチュートリアルでは、それを行う必要はありません。

ビルド構成ではなく、配置先に関連する変更を構成するには、さらに 2 つの変換ファイルが必要です。 この種の設定の一般的な例は、テストと運用環境で異なる WCF エンドポイントです。 この後のチュートリアルでは、"Test and Production" という名前の発行プロファイルを作成するので、Web.Test.config ファイルと Web.Production.config ファイルが必要になります。

発行プロファイルに関連付けられている変換ファイルは、手動で作成する必要があります。 ソリューション エクスプローラーで、ContosoUniversity プロジェクトを右クリックし、[エクスプローラーでフォルダーを開く] を選択します。

Open_folder_in_Windows_Explorer

エクスプローラーで、Web.Release.config ファイルを選択し、ファイルをコピーして、コピーを 2 つ貼り付けます。 これらのコピーの名前を Web.Production.configWeb.Test.config に変更し、エクスプローラーを閉じます。

ソリューション エクスプローラーで、[最新の情報に更新] をクリックして新しいファイルを表示します。

新しいファイルを選択し、右クリックし、コンテキスト メニューの [プロジェクトに含める] をクリックします。

テスト構成ファイルと運用構成ファイルをプロジェクトに含む

これらのファイルが配置されないようにするには、ソリューション エクスプローラーでファイルを選択し、[プロパティ] ウィンドウで [ビルド アクション] プロパティを [コンテンツ] から [なし] に変更します。 (ビルド構成に基づく変換ファイルは、自動的に配置されないようになっています)。

これで、Web.config 変換を Web.config 変換ファイルに入力する準備ができました。

エラー ログへのアクセスを管理者に制限する

アプリケーションの実行中にエラーが発生した場合、アプリケーションはシステム生成のエラー ページの代わりに汎用エラー ページを表示し、エラー ログとレポートに El mah NuGet パッケージを使用します。 Web.config ファイル内の customErrors 要素は、エラー ページを指定します。

<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
  <error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>

エラー ページを表示するには、customErrors 要素の mode 属性を一時的に "RemoteOnly" から "On" に変更し、Visual Studio からアプリケーションを実行します。 Studentsxxx.aspx など、無効な URL を要求してエラーを発生させます。 IIS で生成される "ページが見つかりません" というエラー ページの代わりに、GenericErrorPage.aspx ページが表示されます。

Error_page

エラー ログを表示するには、URL 内のポート番号の後のすべてを elmah.axd (スクリーン ショットの例では http://localhost:51130/elmah.axd) に置き換えて、Enter キーを押します。

Elmah_log_page

完了したら、必ず customErrors 要素を "RemoteOnly" モードに戻してください。

開発用コンピューターでは、エラー ログ ページへの自由なアクセスを許可すると便利ですが、運用環境ではセキュリティ上のリスクになります。 運用サイトでは、Web.Production.config ファイルで変換を構成すると、エラー ログ アクセスを管理者だけに制限する認可規則を追加できます。

次に示すように、Web.Production.config を開き、開始 configuration タグの直後に新しい location 要素を追加します。 (location 要素のみを追加し、周囲のコンテキストを提供するためだけにここに示されているマークアップは追加しないでください)。

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <location path="elmah.axd" xdt:Transform="Insert">
      <system.web>
        <authorization>
          <allow roles="Administrator" />
          <deny users="*" />
        </authorization>
      </system.web>
    </location>
</configuration>

Transform 属性値 "Insert" は、このlocation 要素を Web.config ファイル内の既存の location 要素に兄弟として追加されます。 ([履修単位の更新] ページの認可規則を指定する location 要素が既に 1 つあります。)配置後に運用サイトをテストする場合は、認可規則が有効であることを確認するテストを行います。

テスト環境では、エラー ログへのアクセスを制限する必要がないため、このコードを Web.Test.config ファイルに追加する必要はありません。

Note

セキュリティ上の注意 運用アプリケーションでは、決してエラーの詳細を一般公開したり、その情報をパブリックな場所に保存したりしないでください。 攻撃者は、エラー情報を使用してサイトの脆弱性を検出できます。 独自のアプリケーションで ELMAH を使用する場合は、セキュリティ リスクを最小限に抑えるために ELMAH を構成する方法を必ず調査してください。 このチュートリアルの ELMAH の例は、推奨される構成ではありません。 これは、アプリケーションがファイルを作成できる必要があるフォルダーを処理する方法を示すために選択された例です。

環境インジケーターの設定

一般的なシナリオは、Web.config ファイルの設定を、配置する環境ごとに異なるものにすることです。 たとえば、WCF サービスを呼び出すアプリケーションでは、テスト環境と運用環境で異なるエンドポイントが必要になる場合があります。 Contoso University アプリケーションには、この種の設定も含まれています。 この設定は、サイトのページに表示されるインジケーターを制御し、開発、テスト、本番など、どの環境にいるかを示します。 設定値は、アプリケーションが Site.Master マスター ページのメイン見出しに "(Dev)" または "(Test)" のどちらを追加するかを決定します。

Environment_indicator

アプリケーションが運用環境で実行されている場合、環境インジケーターは省略されます。

Contoso University の Web ページは、Web.config ファイルの appSettings で設定された値を読み取り、アプリケーションがどの環境で実行されているかを判断します。

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

値はテスト環境では "Test"、運用環境では "Prod" にする必要があります。

Web.Production.config を開き、先ほど追加した location 要素の開始タグの直前に appSettings 要素を追加します。

<appSettings>
    <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

xdt:Transform 属性値 "SetAttributes" は、この変換の目的が、Web.config ファイル内の既存の要素の属性値を変更することであることを示しています。 xdt:Locator 属性値 "Match(key)" は、変更される要素が、ここで指定された key 属性と一致する key 属性を持つものであることを示します。 add 要素の他の唯一の属性は value で、これが配置された Web.config ファイルで変更される属性です。 このコードにより、運用環境にデプロイされる Web.config ファイルで、Environment appSettings要素のvalue属性が "Prod" に設定されます。

次に、value を "Prod" ではなく "Test" に設定する以外は、同じ変更を Web.Test.config ファイルに適用します。 完了すると、Web.Test.configappSettings セクションは次の例のようになります。

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

デバッグ モードを無効化する

リリース ビルドでは、配置先の環境に関係なくデバッグを有効にしません。 既定では、Web.Release.config 変換ファイルは、compilation 要素から debug 属性を削除するコードで自動的に作成されます。

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>

この Transform 属性により、リリース ビルドを配置するたびに、配置された Web.config ファイルから debug 属性が省略されます。

この同じ変換は、テストおよび運用変換ファイルに含まれています。これらは、リリース変換ファイルをコピーして作成したためです。 複製する必要はないため、各ファイルを開き、コンパイル要素を削除して、各ファイルを保存して閉じます。

接続文字列の設定

発行プロファイルで接続文字列を指定できるため、ほとんどの場合、接続文字列変換を設定する必要はありません。 ただし、SQL Server Compact データベースを配置していて、Entity Framework Code First Migrations を使用して宛先サーバー上のデータベースを更新する場合は例外があります。 このシナリオの場合は、データベース スキーマを更新するためにサーバーで使用される追加の接続文字列を指定する必要があります。 この変換を設定するには、Web.Test.configWeb.Production.config 変換ファイルの両方で、<[構成]> タグを開いた直後に、<connectionStrings> 要素を追加します。

<connectionStrings>
  <add name="SchoolContext_DatabasePublish" connectionString="Data Source=|DataDirectory|School-Prod.sdf" providerName="System.Data.SqlServerCe.4.0" xdt:Transform="Insert"/>
</connectionStrings>

Transform 属性は、配置された Web.config ファイルの connectionStrings 要素にこの接続文字列を追加することを指定します。 (発行プロセスでは、この追加の接続文字列が存在しない場合は自動的に作成されますが、既定では、SQL Server Compact では機能しない providerName 属性が System.Data.SqlClient に設定されます。接続文字列を手動で追加することで、配置プロセスで間違ったプロバイダー名の接続文字列要素が作成されることを防ぐことができます)。

これで、テストと運用のために Contoso University アプリケーションを配置するのに必要なすべての Web.config 変換を指定しました。 次のチュートリアルでは、プロジェクトのプロパティを設定する必要がある配置のセットアップ作業を行います。

その他の情報

このチュートリアルで説明するトピックの詳細については、「ASP.NET 配置のコンテンツ マップ」の Web.config 変換シナリオを参照してください。