0

web.config に接続文字列がリストされている Web サイトがあります。接続文字列は、別のリリース データベースを参照するときに、リリースされるまで開発データベースを参照できるように、公開機能によって変更されます。

ただし、Web サイトはいくつかのアセンブリを介してデータベースにアクセスします。それらはクラス ライブラリであるため、少なくとも私が知る限り、公開することはできません。web.config が app.config 接続文字列をオーバーライドすることを読みましたが、それは起こっていないようです。

リリース データベースを参照するようにアセンブリの app.config ファイルを変更しない限り、リリース サイトを公開するたびに開発データベースが参照されます。

毎回それをすることを覚えておく必要はありません。どうすればこれを処理できますか?

4

1 に答える 1

2

ここには 2 つの問題があります。

1. 公開するたびに正しい設定を公開することを忘れないようにする方法:

このような設定を展開する 1 つの方法は、Visual Studio で web.config 変換を使用することです。これは設定が非常に簡単で、公開するたびに設定を更新することを覚えておく必要がないことを意味します。

デバッグおよびリリース環境と同様に、「UAT」、「ステージング」、「ベータ」、または必要なその他の構成の変換を作成することもできます。

これらの記事が役に立つかもしれません: herehere、およびhere

たとえば、リリース環境の変換は次のとおりです。

    <?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
  </system.web>
</configuration>

上記では、リリース モードの変換が MyDB 接続文字列の属性を設定し (xdt:Transform="SetAttributes")、コンパイル セクションからデバッグ属性を削除し、customErrors セクションを新しいバージョンに置き換えていることがわかります。

シンプルですが、非常に強力なテクニックです。

2. アセンブリに web.config の設定を取得させる方法

ライブラリが通常の方法で作成されている場合、[Web]ConfigurationManager.ConnectionStringsプロパティにアクセスするだけで接続文字列を取得する必要があります。@Bob Horn が言うように、ホスト プロセスの構成ファイル (この場合は Web アプリの web.config) から設定を取得する必要があります。

ただし、ライブラリがプロジェクト内の .Settings ファイルから設定を取得していることに気付く場合があり、その場合は少し複雑になります。app.config の設定セクションを web.config にコピーする必要があります。(上記の変換テクノロジを使用してこれを行うこともできます。)

他のアセンブリのソース コードにアクセスできる場合は、接続文字列を取得するコードの部分を見つけます。ConfigurationManager クラスにアクセスしていない場合は、web.config ファイルを取得していない理由が説明されている可能性があります。

于 2013-10-28T22:10:15.767 に答える