2011-11-10 21 views
1

実行時にconfigファイルを上書きする方法を教えてください。 DEV、TEST、UAT、PRODの4つの設定ファイルがあります。ユーザーの選択に基づいて、デフォルトの設定ファイルを選択指定の設定ファイルの1つで完全に上書きする必要があります。これらの設定ファイルはappsettingsセクションを持つだけでなく、多くの属性を持つ複雑なcutomセクションとサブエレメントを持っています。私は、実行時に動的に上書きおよび更新を行う必要があります。私はappsettingsセクションを編集することについて非常に多くの記事があることを知っています。しかし、私は完全にファイル全体を上書きしたい。 VB.netでのあなたの助けに感謝します。実行時にwpfプロジェクトのapp.configを変更または更新する

私は、カスタムセクションがあります:ClickOnceのを使用して

答えて

1

を、私はそれは読み取り専用であるので、あなたがまたはインストールフォルダ内のファイルを変更する必要があることができると信じていない...したがって、あなたは選択肢を持っている:MSIと行きますインストールし、適切な設定ファイルを切り替えるためのカスタムインストールアクションまたはは、さまざまな環境をカプセル化するカスタム構成要素をいくつか構築します。

私たちのアプリケーションでは、後者を行っています。メインのapp.configには、次のようなカスタム設定セクションがあります。

<myApp defaultEnvironmentName="prod">  
    <environments> 
    <add name="prod" title="Production" description="Full production environment" injectionContainers="prod"> 
     ... 
     <!-- Add custom elements the affect your environment --> 
     ... 
    </add> 
    <add name="qa" title="Quality Assurance" description="Full production environment except running off our mock database" injectionContainers="prod qa"> 
     ... 
     <!-- Add custom elements the affect your environment --> 
     ... 
    </add> 
    </environments> 
</myApp> 

... <!-- Other elements that are common to all environments --> ... 

その後、我々は簡単に環境を切り替えることができますしrun-time flag or command line argumentを使用しています。使用中の環境の値は、ユーザの設定ファイルに保存され、後で使用するときにアプリケーションは最後に使用された環境をロードします。

我々は直接上記利用カスタム構成セクションのCurrentEnvironmentプロパティは、それを動作するように設定言及呼びかける環境ごとに異なる何かにアクセスする必要があります。ここで、MyAppSection.Configuredだけである

var title = MyAppSection.Configured.CurrentEnvironment.Title; 

注意ConfigurationManager.GetSection(...)に基づいてロードするシングルトンインスタンス。

コンフィギュレーションコードのボートロードの可能性は、あなたが望む最後のものですが、設定ファイル内の環境変数を明確に定義して分離できるようになります。

関連する問題