Web.Configのデバッグ/リリース


82

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ファイルに何も表示されません。ライブデータベース接続文字列が表示されませんか?

回答:


131

Visual Studio 2010の一部であるweb.config変換は、現在のweb.configファイルを.Debugまたは.Releaseバージョンに「変換」するために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>

追加の注意事項:変換は、サイトを公開したときにのみ発生し、F5またはCTRL + F5で実行したときにのみ発生します。特定の構成に対してローカルで更新を実行する必要がある場合は、このためにWeb.configファイルを手動で変更する必要があります。

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

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


20
これはF5時間ではなく公開時間に発生するというメモを回答に追加できますか?どうやら私はこれを2時間正しかったのですが、気づいていませんでした。
ポール

Visual Studio Online Continuous Buildでこれを機能させるにはどうすればよいですか?ビルドおよびAzureへのデプロイ中にWeb.Configを変換する必要があります。
Rosdi Kasim 2015

1
@ RosdiKasim-これがVisualStudioオンラインで100%一致するかどうかはわかりませんが、特定のプロジェクトを展開する必要がある場合(複数ある場合)、または別のビルドを使用する(したがって変換する)必要がある場合は、で直接指定しますAzureWebサイトインスタンス。しばらく前に書いた詳細は次のとおりです。freshconsulting.com
Dillie-O

ここでは詳細にこれをdescirbe MSDNへのリンクですmsdn.microsoft.com/en-us/library/dd465326(VS.100).aspx
ハカンFıstık

1
F5経由でVSでサイトを実行することと公開することに関する追加のメモは私にとって非常に役に立ちました。
デニスM.キッチン

8

ConfigTransformNugetパッケージとして利用可能なビルドターゲットを使用することが可能です-https //www.nuget.org/packages/CodeAssassin.ConfigTransform/

すべて「ウェブ。* config」変換ファイルは変換され、選択したビルド構成に関係なく、ビルド出力ディレクトリに一連の「web。*。config.transformed」ファイルとして出力されます。

同じことが、非Webプロジェクトの「app。*。config」トランスフォームファイルにも当てはまります。

次に、次のターゲットをに追加します*.csproj

<Target Name="TransformActiveConfiguration" Condition="Exists('$(ProjectDir)/Web.$(Configuration).config')" BeforeTargets="Compile" >
    <TransformXml Source="$(ProjectDir)/Web.Config" Transform="$(ProjectDir)/Web.$(Configuration).config" Destination="$(TargetDir)/Web.config" />
</Target>

これは、この件に関してGoogleに表示される最初のStackoverflow投稿であるため、回答を投稿します。


この優れた方法は私にとっては並外れて機能しましたが、言及したConfigTransformをインストールする必要はありませんでした(常にすべての構成を変換します)-Visual Studioでアクティブなビルド構成を設定し(たとえば、デバッグに変更します)、ソリューションをビルドし、出来上がり!
BornToCode

5

開発中(F5またはCTRL + F5を使用)で変換を機能させるには、パッケージフォルダー(packages \ ConfigTransform \ ctt.exe)にctt.exe(https://ctt.codeplex.com/)をドロップします。

次に、ビルド前またはビルド後のイベントをVisualStudioに登録します...

$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config"
$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)web.config" transform:"$(ProjectDir)web.$(ConfigurationName).config" destination:"$(ProjectDir)web.config"

変換には、SlowCheeta VS拡張機能(https://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5)を使用します


1
空白を保持するには(変換された構成が1行に表示されないようにする)、コマンドラインにpreservewhitespace indent IndentChars: ""を追加します。$(SolutionDir)packages\ConfigTransform\ctt.exe source:"$(ProjectDir)connectionStrings.config" transform:"$(ProjectDir)connectionStrings.$(ConfigurationName).config" destination:"$(ProjectDir)connectionStrings.config" preservewhitespace indent IndentChars:" "
Emanuel Nilsson 2016年

3

あなたが代わるしようとしている場合は、接続文字列のすべての生産環境のためのニュースのものとを、あなたは、単にこの構文を使用して生産するもので、すべての接続文字列を置き換えることができます。

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

<connectionStrings xdt:Transform="Replace">
    <!-- production environment config --->
    <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>
....

この回答の情報は、この回答このブログ投稿から取得されます。

注意:他の人がすでに説明したように、この設定は、アプリケーションが実行/デバッグ(F5キーを押す)ではなく、公開する場合にのみ適用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.