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ファイルには何も表示されません。LiveDatabase接続文字列は表示されませんか?
Visual Studio 2010の一部であるweb.config変換では、現在のweb.configファイルを.Debugまたは.Releaseバージョンに「変換」するためにXSLTを使用します。
.Debug/.Releaseファイルで、接続文字列フィールドに次のパラメーターを追加する必要があります。
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"
これにより、各接続文字列行で一致する名前が検索され、それに応じて属性が更新されます。
注:変換ファイルのproviderNameパラメーターは変更されないため、更新することを心配する必要はありません。
これが私のアプリの例です。 web.configファイルセクションは次のとおりです。
<connectionStrings>
<add name="EAF" connectionString="Data Source=NTSQLT\S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=XXXX" providerName="System.Data.SqlClient" />
</connectionString>
そして、適切な変換を行うweb.config.releaseセクションは次のとおりです。
<connectionStrings>
<add name="EAF" connectionString="Data Source=NTSQLP\S2K5TST;Initial Catalog=HR;User ID=EAFApp;Password=YYYY" 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
Nugetパッケージとして利用可能なConfigTransform
ビルドターゲットを使用することができます- https://www.nuget.org/packages/CodeAssassin.ConfigTransform/
すべての「web。*。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投稿であるため、回答を投稿します。
トランスフォームを開発で機能させるには(F5またはCTRL + F5を使用)、パッケージフォルダー(packages\ConfigTransform\cttにctt.exe( https://ctt.codeplex.com/ )をドロップします。 EXE)。
次に、Visual Studioでビルド前またはビルド後のイベントを登録します...
$(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 )。
すべての接続文字列を本番環境のニュース文字列に置き換える場合、次のことができます次の構文を使用して、すべての接続文字列を本番のものに置き換えるだけです。
<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>
....
この回答の情報は、 this answer および this blog post から取得されます。
notice:他の人が既に説明したように、この設定は、アプリケーションの実行時/デバッグ時ではなく、アプリケーションの公開時にのみ適用されます(F5キーを押します)。