1. ホーム
  2. c#

[解決済み] Web.Config デバッグ/リリース

2023-04-28 11:23:09

質問

Visual Studio 2010 の web.config には、データベースをデバッグ モードからリリース モードに切り替える機能があることは知っています。

以下は私のWeb.Release.configです。

<?xml version="1.0"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Testing1" connectionString="Data Source=test;Initial Catalog=TestDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

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

</configuration>

以下は私のWeb.Debug.configのコードです。

<?xml version="1.0"?>

<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
      providerName="System.Data.SqlClient" />
    <add name="Live1" connectionString="Data Source=Live;Initial Catalog=LiveDatabase;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

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

</configuration>

そして、これは私のWeb.configのコードです。

<?xml version="1.0"?>

<!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 -->
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
       <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
       <providers>
          <clear/>
          <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
         enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
         applicationName="/" />
       </providers>
    </membership>

    <profile>
       <providers>
          <clear/>
          <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
       </providers>
    </profile>

    <roleManager enabled="false">
       <providers>
          <clear/>
          <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
       </providers>
    </roleManager>

  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

プロジェクトを公開しても、Web.configファイルに何も表示されません。Live Databaseの接続文字列も表示されません。

どのように解決するのですか?

Visual Studio 2010 の一部である web.config トランスフォームでは、現在の web.config ファイルを .Debug または .Release バージョンに "transform" するために XSLT を使用します。

.Debug/.Release ファイルでは、接続文字列フィールドに次のパラメーターを追加する必要があります。

xdt:Transform="SetAttributes" xdt:Locator="Match(name)"

これにより、各接続文字列の行は一致する名前を見つけ、それに応じて属性を更新することになります。

注意: 変換ファイルの providerName パラメータは変更されないので、更新を心配する必要はありません。

私のアプリケーションの 1 つの例を示します。Web.config ファイルのセクションです。

<connectionStrings>
      <add name="EAF" connectionString="[Test Connection String]" />
</connectionString>

そして、これが適切な変換を行う web.config.release セクションです。

<connectionStrings>
      <add name="EAF" connectionString="[Prod Connection String]"
           xdt:Transform="SetAttributes"
           xdt:Locator="Match(name)" />
</connectionStrings>

1 つ補足すると、変換はサイトを公開するときにのみ行われ、F5 または CTRL+F5 で単に実行するときには行われません。与えられた設定に対してローカルで更新を実行する必要がある場合、このために Web.config ファイルを手動で変更する必要があります。

詳細については、MSDN のドキュメントを参照してください。

https://msdn.microsoft.com/en-us/library/dd465326(VS.100).aspx