この投稿の主題を達成するために調査した方法と、それらの問題についてまとめた (役立つことを願っています) まとめをまとめました。他に気に入った方法があれば教えてください。特に、私が言及した方法では解決できない問題を解決できる場合は、教えてください。
接続文字列は web.config のままにし、XDT/msdeploy 変換を使用して、アクティブなビルド構成 (web.PublicTest.config ファイルなど) に応じた設定に置き換えます。これに関する私の問題は、いくつかのサーバー固有の設定を、多くの構成要素を含むグローバルに同一のファイルにマージして埋め込むことです。さらに、複数のピア レベルのアプリケーション間で接続文字列の定義を共有することはできません。
web.config で接続文字列に configSource="DeveloperLocalConnectionStrings.config" 値を指定し、XDT でこの値を変換して、コードベース内の複数の環境固有ファイルの 1 つを指すようにします。これに関する私の問題は、すべての環境のパスワードをすべての宛先に (もちろん SVN に加えて) 送信し、サーバー上に未使用の構成セクションが誤って使用されるのを待っていることです。
web.config ではなく、machine.config ファイル内の特定の接続文字列。問題: 一体誰が machine.config で接続文字列を見つけることを期待しているのか、その結果、予期せぬ名前の衝突が発生する可能性が高くなります。
configSource="LocalConnectionStrings.config" を指定し、値を変換せず、プロジェクト xml を編集して接続文字列構成のデプロイを除外します。http://msdn.microsoft.com/en-us/library/ee942158.aspx#can_i_exclude_specific_files_or_folders_from_deployment- これは、プロプライエタリ (非分散型) Web アプリケーションのニーズに対応するために私が見つけた最良のソリューションですが、ある日別のチーム メンバーが来て、なんらかの理由で本番サイトをコピーしてテストするのではないかと疑っています。UAT 中に実稼働データベースが変更されています。(更新: このシナリオではワンクリック パブリッシュを使用できないことがわかりました。-skip パラメーターを指定した msdeploy コマンド ラインのみです。上記のようにファイルを除外することは、" ではなく "なし" コンパイル アクションに設定することと同じです。 Content" となり、パッケージによって展開ターゲットから削除されます。)
まだ設定されていない場合は、接続文字列を要求するように展開パッケージを配線します (これを行う方法はまだわかりませんが、可能であることは理解しています)。これにより、上記の #4 と同様の結果が得られます。
configSource="..\ConnectionStrings.config" を指定します。選択したアプリ間で構成を共有でき、アプリケーション ディレクトリにマシン固有のものは何もないため、私のニーズには最適です。残念ながら、この属性では親パスは許可されていません ('appSettings file=""' の場合のように - configSource= 参照内で file= をうまく使用できることにも注意してください)。
ps これらのソリューションの一部については、ここで説明します: ASP.Net 構成ファイル -> 複数の開発者と展開サーバーの接続文字列