12

app.config ファイルのいくつかの設定を管理するための小さな GUI を作成しました。GUI は製品の一部としてリリースされており、app.config ファイルをテキスト エディターで開かなくても値を変更できます。

プロパティはカスタム configSection に実装され、コード内で厳密に型指定されます。私の問題は、app.config ファイルが更新されたとき (GUI から保存したとき)、アセンブリの完全修飾名が次のように configSection に書き込まれることです。

<section name="ConfigurationSettings" type="PerformanceDude.MSBuildShellExtension.Common.ConfigurationSettings, Common, Version=2.2.1.0, Culture=neutral, PublicKeyToken=1ab1b15115e63xxx" />

このアセンブリを新しいバージョン番号にアップグレードすると、GUI コード アセンブリのバージョンが app.config のアセンブリ参照と一致しなくなります。

これは私が設定をロードする方法です:

var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = ConfigFilePath }, ConfigurationUserLevel.None);
var settings = Config.GetSection("ConfigurationSettings") as ConfigurationSettings;

これは私が設定を保存する方法です:

config.Save(ConfigurationSaveMode.Minimal, true);

更新するたびにバージョンを変更するアップグレード スクリプトを書きたくありません。この問題の優れた解決策を知っている人はいますか?

4

1 に答える 1

2

私は以前に同様のことをしなければなりませんでした。構成ファイルをxmlとしてロードし、関連するセクションをオブジェクトに逆シリアル化してから、それらをxmlに戻しました。そのように .net 構成 API を回避すると、バージョンの問題を回避できます。

もう 1 つの方法は、古いバージョンのアセンブリを新しいバージョンにリダイレクトすることです。アセンブリが GAC にある場合は、ポリシー ファイルを使用してこれを行い、新しいバージョンを展開するときにそれらを展開できます。構成内のバージョン番号は重要ではありません。

于 2012-07-02T19:40:59.433 に答える