Visual Studio 2008 のパブリッシュ (ClickOnce) システムを使用してデプロイされた WinForms アプリケーションがあります。アプリケーションのapp.config
ファイル内に、次の形式のサード パーティ コンポーネントに必要な構成セクションがあります。
<section name="thirdPartySection"
type="System.Configuration.NameValueSectionHandler" />
したがって、このセクションは appSettings にはなく、次のようになります。
<thirdPartySection >
<add key="someKey" value="someValue" />
</thirdPartySection >
キーと値のペアが NameValueCollection であることを理解しています。私が直面している問題は、インストールされている環境に基づいて、展開時または実行時に値を変更したいということです(どちらでも構いません)。someValue
someOtherValue
現在、実行時に他の構成変更をいくつか行っていますが、それらはAppSettings
セクションにあるため、簡単に取得できます。解決策の検索で多くの参照を見つけましたが、直面している NameValueCollection ではなく、カスタム クラスを持つセクションに依存しているようです。
このデータを変更する最良の方法を知っている人はいますか? ConfigurationManager.RefreshSection() を使用したランタイムの変更は、現在のコードにより適していますが、インストール段階でも提案を受け付けています。
編集:これは実行時に機能します。これは、古い構成のオーバーライドを処理していた方法です。
Configuration config = ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);
config.AppSettings.Settings["Main.ConnectionString"].Value =
PolicyTrackerInfo.ConnectionString;
config.AppSettings.Settings["Main.linq"].Value =
PolicyTrackerInfo.LinqConnectionString;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
別のセクションでも同じことをしようとしています:
string overwriteXml = config.GetSection("thirdPartySection")
.SectionInformation.GetRawXml();
XmlDocument xml = new XmlDocument();
xml.LoadXml(overwriteXml);
XmlNode node = xml.SelectSingleNode("thirdPartySection/add");
node.Attributes["value"].Value = PolicyTrackerInfo.OverwriteString;
ここまでは順調ですね。ただし、古い XML を変更したデータに置き換える方法が見つかりません。実行時に可能ですか?
余談ですが、 app.config.deploy ファイルを手動で変更してみました。変更がインストーラーによって検出され、続行を拒否するため、検証エラーが発生します。私は自動デプロイが本当に好きで、以前のオーバーライドはうまく機能しました。