2

私の組織には複数の環境 (Dev、QA、Stage、Prod、Disaster Recovery) があり、app/web.config ファイルの URI、接続文字列などに環境固有の詳細を含めないようにしたいと考えています。ランタイム置換を実行します。たとえば、これの代わりに:

<endpoint address="http://MyDevWebServer/SomeService" binding="basicHttpBinding"...

私はこのようなものを好むだろう:

<endpoint address="http://{Env:WebServerName}/SomeService" binding="basicHttpBinding"...

これは、私が制御しているクラスから読み取られる構成設定の場合は簡単です (その環境の実際のサーバー名で置換 {Env:WebServerName} を実行するラッパーを提供するだけです) が、設定が読み取られるときにこの置換が行われることも必要です私が制御できないクラス (WCF、NHibernate など)。この種の置換ロジックを注入する方法を知っている人はいますか? 私は AOP アプローチが可能かもしれないと仮定していますが、個人的に AOP フレームワークの経験はあまりありません。

4

6 に答える 6

1

ターゲットとする環境に応じて、XPathを使用して環境固有の値を識別および置換するビルド後のnantスクリプトがあります。すべての構成値は、デフォルトで開発環境用です。これにより、ビルドプロセスに短い遅延が追加されますが、実際には非常に堅牢なソリューションであることが証明されています。つまり、環境設定を台無しにしたり、交差させたりすることはありません。

于 2009-10-06T16:27:26.313 に答える
1

この置換を提供するApplicationSettingsBaseからカスタム クラスを派生させることで、これを実行できるはずです。

Application Settings Architectureを読むことをお勧めします。独自の設定アーキテクチャを作成するプロセスについて説明します。これには、任意のソースから読み取ったり、プロセスで他の作業を実行したりできる独自のハンドラーを設定することも含まれます。

于 2009-10-06T16:18:14.627 に答える
1

1 つの方法は、構成セクション (appSettings、connectionStrings など) に ConfigSource を使用することです。詳細については、 http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspxを参照してください。そうすれば、web/app.config にコア情報を含めることができ、その環境のファイルに固有の環境設定を設定できます。

于 2009-10-06T16:20:07.983 に答える
0

設定をデータベースに移動しましたが、それ以降、これを処理する必要はありません。ここを参照してください。

于 2009-10-06T16:34:06.327 に答える
0

実行時の置換を行う方法を見つけようとしていますが、この場合はビルド時の置換がより良い解決策になることをお勧めします。たとえば、nant タスクxmlpokeを使用して、ビルド中に構成値を置き換えています。また、 Web デプロイ プロジェクトで web.config セクションの置換を試すか、MSBuild コミュニティ タスク () から XmlMassUpdate タスクを試すこともできます。

于 2009-10-06T18:19:39.437 に答える
0

私は、この種の代替が望ましいことに完全に同意し、Microsoft Connect でこの機能を要求しました

ただし、マイクロソフトからはあまり関心がありません:(

于 2009-10-06T17:52:45.980 に答える