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 を使用した Web 配置の ASP.NET」を参照してください。

概要

このチュートリアルでは、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 プロジェクトを右クリックし、Windows エクスプローラーで [フォルダーを開く] を選択します。

Open_folder_in_Windows_Explorer

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

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

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

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

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

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

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

アプリケーションの実行中にエラーが発生した場合、アプリケーションはシステムによって生成されたエラー ページの代わりに汎用エラー ページを表示し、エラーログとレポートに Elmah 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 に置き換えて (スクリーン ショットの例では ) Enter http://localhost:51130/elmah.axdキーを押します。

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の要素に兄弟として追加されます。 ([クレジットの更新] ページの承認規則を指定する要素は既に 1 つありますlocation)。展開後に運用サイトをテストする場合は、この承認規則が有効であることをテストして確認します。

テスト環境でエラー ログへのアクセスを制限する必要がないため、このコードを 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開き、前に追加したappSettings要素の開始タグの直前にlocation要素を追加します。

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

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

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

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

デバッグ モードの無効化

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

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

属性を Transform 使用すると、 debug リリース ビルドをデプロイするたびに、デプロイされた Web.config ファイルから 属性が省略されます。

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

接続文字列の設定

ほとんどの場合、発行プロファイルで接続文字列を指定できるため、接続文字列変換を設定する必要はありません。 ただし、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 要素にこの接続文字列を追加することを指定します。 (発行プロセスでは、この追加の接続文字列が存在しない場合は自動的に作成されますが、既定では providerName 属性は にSystem.Data.SqlClient設定され、SQL Server Compactでは機能しません。接続文字列を手動で追加することで、デプロイ プロセスで間違ったプロバイダー名の接続文字列要素が作成されないようにします)。

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

詳細情報

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