5

SettingsProperty.NETapp.configファイルに動的に追加する方法を作成しました。すべてうまく機能しますが、次にアプリを起動すると、デザイナーで作成されたプロパティしか表示されません。プロパティランタイムをロードバックするにはどうすればよいですか?

を作成するための私のコードはSettingsProperty次のようになります。

internal void CreateProperty<T>(string propertyName)
{
    string providerName = "LocalFileSettingsProvider";
    System.Configuration.SettingsAttributeDictionary attributes = new SettingsAttributeDictionary();
    System.Configuration.UserScopedSettingAttribute attr = new UserScopedSettingAttribute();

    attributes.Add(attr.TypeId, attr);

    System.Configuration.SettingsProperty prop;
    SettingsProvider provider = ApplicationEnvironment.GlobalSettings.Providers[providerName];

    prop = new System.Configuration.SettingsProperty(
        propertyName,
        typeof(T),
        provider,
        false,
        default(T),
        System.Configuration.SettingsSerializeAs.String,
        attributes,
        false,
        false
    );

    ApplicationEnvironment.GlobalSettings.Properties.Add(prop);
    ApplicationEnvironment.GlobalSettings.Reload(); 
}

次回の実行時に設定プロパティを要求すると、以前に作成されたプロパティが見つかりませんでした。私が電話するApplicationEnvironment.GlobalSettings.Reload();かどうかは関係ありません。

4

2 に答える 2

1

同じ問題に遭遇しました。私見問題は、.NETSystem.Configuration.SettingsBaseオブジェクトがリフレクションを使用して、永続ストレージからロードする必要があるプロパティの名前、タイプなどを決定することです。また、動的設定プロパティを追加すると、この情報が欠落します。したがって、値を保存する前だけでなく、値を読み取る前にも、設定プロパティの定義を追加する必要があります。あなたの場合、それはこのようなものでなければなりません

...
// the name and type of the property being read must be known at this point
CreateProperty<T>( propertyName );
ApplicationEnvironment.GlobalSettings.Reload();
T propertyValue = ApplicationEnvironment.GlobalSettings[propertyName];

CreateProperty使用するすべてのプロパティに対して最初にメソッドを呼び出してから、 Reload1 回だけ呼び出すことができます。どちらの場合も、プロパティの名前と型を知っている必要があります。

于 2012-01-31T13:01:04.017 に答える
1

ユーザー定義の構成設定は、それらが作成されたアセンブリのバージョンに関連付けられています。ローリング バージョン番号 (たとえば1.0. . ) を使用している場合は、前回の実行からの設定が失われます。

于 2009-08-30T06:45:29.177 に答える