3

.NETプロジェクトで、接続文字列などの構成設定がapp.configファイルに保存されているとします。これは、チームの開発者ごとに異なります(ローカルのSQLServerまたは特定のサーバーインスタンスを使用している場合があります)。 、またはリモートサーバーの使用など)。

各開発者が独自の開発「設定」を持つことができるように(つまり、ソース管理にチェックインされないように)、ソリューションをどのように構成できますが、ソース管理にチェックインされるデフォルトの接続文字列を提供します(これにより、ビルドプロセスまたは新しい開発者)。


編集:file@Jonathonによって提案された ""メソッドは、どういうわけconnectionStringsかセクションで使用できますか?

4

5 に答える 5

4

AppSettingsは、ローカルファイルでオーバーライドできます。

<appSettings file="localoveride.config"/>

これにより、各開発者は独自のローカル設定を維持できます。

接続文字列に関しては、完璧な世界では、すべての開発者がSQL Serverを実行するのではなく、テストDBに接続する必要があります。

ただし、Web.Config.Prdという名前のファイルをソース管理に保持し、それをビルド展開に使用するのが最善であることがわかりました。誰かがweb.configを変更した場合は、.PRDファイルにも変更を追加する必要があります...そこには適切な自動化がありません:(

于 2008-08-21T05:05:24.370 に答える
3

編集:@Jonathonによって提案された「ファイル」メソッドは、connectionStringsセクションで何らかの形で使用できますか?

または、チェックインされた構成ファイルに複数の接続文字列を含め、AppSettingsキーを使用して、使用するConnectionStringを決定することもできます。この目的のために、コードベースに次のものがあります。

public class ConnectionString
{
    public static string Default
    {
        get 
        { 
            if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"]))
                throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings");

            return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]);
        }
    }

    public static string GetByName(string dsn)
    {
        return ConfigurationManager.ConnectionStrings[dsn].ConnectionString;
    }
}
于 2008-08-21T05:42:28.433 に答える
0

私はいつも設定ファイルのテンプレートを作成しています。

例として、プロジェクトの構築にNAntを使用します。local.properties.xml.templateというファイルをチェックインしています。local.properties.xmlが存在しない場合、NAntビルドは開発者に警告します。そのファイルの中には、ワークステーション固有の設定があります。テンプレートはソース管理にチェックインされますが、実際の構成はチェックインされません。

于 2008-08-21T05:02:51.040 に答える
0

私はちょうどうまくいくかなり古風なデザインを使用しています。

  • /_Test__app.config
  • /_Prod__app.config
  • /app.config

次に、nantスクリプトに、現在のビルド環境と_ app.configをコピーして、app.configにコピーするタスクがあります。

それは厄介ですが、プロバイダーが「dev」または「prod」接続文字列を調べ、3つの名前付き接続文字列を持っていると言って、プロバイダーとConfigurationManagerの間に侵入してスプーフィングすることはできません。

ナントタスク:

<target name="copyconfigs" depends="clean">
  <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}">
   <in>
     <items>
       <include name="**/${ConfigPrefix}App.config" />
       <include name="**/${ConfigPrefix}connectionstrings.config" />
       <include name="**/${ConfigPrefix}web.config" />
     </items>
   </in>
   <do>
    <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" />
   </do>
  </foreach></target>
于 2008-08-21T05:04:44.327 に答える
0

@Jonathonによって提案された「file」メソッドをconnectionStringsセクションで何らかの形で使用できますか?

いいえ。ただし、ConnectionStringをAppSettingsキーとして保存することを妨げるものは何もありません。

于 2008-08-21T05:33:47.017 に答える