2

web.config ファイルのさまざまな動的セクションに外部構成ファイルを使用しています。基本的に、環境 (Prod、UAT、Test、Dev など) 間のすべての動的変数は、一般的な名前の .config ファイルに外部化されています。

私の web.config も汎用的であるため、すべての環境が同じ web.config を使用します (接続文字列などは外部ファイルにあるため)。すべてのファイルは環境全体で同じ名前が付けられているため、リリースを行うときは、リリース中に web.config と \Configs* ディレクトリをそのままにしておく必要があります。

(XSLT や PowerShell などを使用して) やりたいことは、これらの外部 *.config ファイルに含まれるすべての情報を web.config にマージして、(マージされた) web.config とバージョンを比較できるようにすることです。開発者によって提供されます。

したがって、現在の web.config は次のようになります。

<sessionState configSource="Configs\System.Web.SessionStateConnectionString.config" />

また、Prod 環境の System.Web.SessionStateConnectionString.config ファイルには次のものが含まれています。

<sessionState mode="StateServer" cookieless="true" timeout="20"/>

テスト環境には次のものがあります。

<sessionState mode="InProc" cookieless="true" timeout="20"/>

すべての外部 *.config ファイルを web.config にマージして、configSource が使用されたことがないかのようにファイルが本質的に完成するようにしたいと思います。これにより、web.config ファイル (マージされた後) で diff または WinMerge を実行し、開発者が提供するものを実行して、新しいキーの追加や新しいモジュールの使用など、変更された内容を表示できます。

これについて最善の方法は何ですか?

4

1 に答える 1

0

私は単純なアプローチを持っていません。それが存在し、それが私たちの両方を助けることを願っています.

展開中に大量の構成ファイルを間違いなく変更する唯一の信頼できる方法は、実際の XML 編集を行うことであることがわかりました。つまり、XML 構造に従います。

それで、あなたがアーカイブしようとしているタスクは、XML値を変更するだけではありません

から

<sessionState configSource="Configs\System.Web.SessionStateConnectionString.config" />

<sessionState configSource="abc.config" />

だけでなく、XML 親の名前も変更します

から

<sessionState configSource="abc.config" />

<sessionState mode="stateServer" />

次に、それを作成するためにさらに子を追加する必要があります

<sessionState mode="StateServer" cookieless="true" timeout="20"/>

したがって、比較のために別の XML を使用する代わりに、必要なすべての環境変数を展開ツールに保存しました。展開中に、展開スクリプト (powershell) が構成ファイル$config = [xml](get-content $webconfig)を直接読み込み、展開ツールから変数を読み込みます

簡単な変更の場合、私は

$node = $config.configuration.sessionState | where {$_.configSource -eq 'Configs\System.Web.SessionStateConnectionString.config'}
$node.configSource = $Prod_session_config #"abc.config"

あなたが必要とする変更のために、私は3 つの新しい子をデタッチconfigSourceし、希望する値で再アタッチします。sessionStatemodecookielesstimeout

そうは言っても、これは非常に長い展開スクリプトです。のような独自のヘルパーを作成して、見栄えを良くすることができますreplace-config $config_keyname $config_keyvalue。必要な一般的な操作を減らすためのヘルパーを使用しても、アプリケーションの可動部分の数によっては、数千行のコードになります。

これにはおそらく数週間かかるでしょう。これが完了すると、大規模な変更が行われる可能性はほとんどありませんが、それでも開発者と非常に良好なコミュニケーションをとる必要があります。新しい環境依存変数が導入されるたびに、開発者が更新する必要があります。

このタスクは、Puppet Augeas などの構成管理ツールでも実行できますが、powershell でいくつかの優れたヘルパーを書き留めると、それほど簡単ではないと思います。XSLT も調べましたが、デプロイ ツールで XSLT を使用する便利な方法が見つかりませんでした。

これは、開発経験が限られている私のソリューションであり、あなたと同じより良いソリューションがあることを切に願っています。

于 2016-04-16T02:25:12.173 に答える