2012-07-02 7 views
11

app.configファイルの一部の設定を管理するための小さなGUIを作成しました。 GUIは製品の一部としてリリースされ、app.configファイルの値をテキストエディタで開くことなく変更することができます。app.configのconfigSectionでバージョン固有の情報を避ける

プロパティは、カスタムconfigSectionに実装されており、コードに強く型付けされています。

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

私はこのアセンブリをアップグレード:私の問題は、(私はGUIから保存するとき)app.configファイルが更新されたとき、私のアセンブリの完全修飾名は、このようなconfigSectionに書かれていること、です新しいバージョン番号であり、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); 

私は更新バージョンの毎回の変更アップグレードスクリプトを記述する必要はありません。誰もがこの問題の素晴らしい解決策を知っていますか?

+2

設定をシリアル化して保存するコードを含めることは可能ですか? – dash

+0

ロードとセーブコードの説明は次のようになりました:) – ThomasArdal

+0

解決方法を見つけましたか? – Zoomzoom

答えて

2

私は以前も同様のことをしなければなりませんでした。私は設定ファイルをxmlとして読み込み、関連するセクションをオブジェクトにデシリアライズしてからxmlに戻してしまいました。そのような方法で.net設定APIを使用することは、バージョンの問題を回避します。

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

+0

実際には、設定DLLをGACに追加すると、設定セクションを定義するときに完全修飾名は必要ありません。あなたが必要とするのは(クラス、アセンブリ) –

+0

です。確かに@SASS_Shooterですが、ポリシーファイルを持っていれば何かにバージョン番号を入れるかどうか気にする必要はありません。 – tallseth

+1

DLLはGACにありません。 configをXMLとしてロードすると、データは強く型付けされません。 configセクションを使用した全体のアイデアは、強く型付けされたプロパティを含むC#オブジェクトを通して各プロパティをロードして保存できるようにすることでした。あなたの提案をありがとう、:) – ThomasArdal

関連する問題