【问题标题】:After application closes App.config returns to its default state应用程序关闭后 App.config 返回到其默认状态
【发布时间】:2014-04-03 11:25:27
【问题描述】:

这里是配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
   <sectionGroup name="CardValidator"
              type="Micro.CardValidator.Models.CardValidatorSectionGroup, Micro.CardValidator">
  <section name="Settings" type="Micro.CardValidator.Models.Settings, Micro.CardValidator" />
</sectionGroup>

 public class CardValidatorSectionGroup : ConfigurationSectionGroup {
    [ConfigurationProperty("Settings", IsRequired = false)]
    public Settings Settings {
        get { return (Settings) Sections["Settings"]; }
    }
}

public class Settings : ConfigurationSection {
    [ConfigurationProperty("LastSoftwareVersionInstalled", IsRequired = true)]
    public string LastSoftwareVersionInstalled {
        get { return (string) base["LastSoftwareVersionInstalled"]; }
        set { base["LastSoftwareVersionInstalled"] = value; }
    }

    [ConfigurationProperty("InstallationPlaceCode", IsRequired = true)]
    public int InstallationPlaceCode {
        get { return (int)base["InstallationPlaceCode"]; }
        set { base["InstallationPlaceCode"] = value; }
    }

    [ConfigurationProperty("InstallationPlaceName", IsRequired = true)]
    public string InstallationPlaceName {
        get { return (string)base["InstallationPlaceName"]; }
        set { base["InstallationPlaceName"] = value; }
    }
}

 public class Config {
    private Settings Settings { get; set; }

    public Station InstallationPlace {
        get {
            return new Station(Settings.InstallationPlaceCode, Settings.InstallationPlaceName);
        }
        set {
            Settings.InstallationPlaceCode = value.Id;
            Settings.InstallationPlaceName = value.ShortName;                
        }
    }

    public string LastInstalledSoftwareVersion {
        get { return Settings.LastSoftwareVersionInstalled; }
        set { Settings.LastSoftwareVersionInstalled = value; }
    }

    private readonly Configuration cfg;

    public Config() {
        cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        CardValidatorSectionGroup akmSectionGroup = (CardValidatorSectionGroup) cfg.SectionGroups["CardValidator"];

        Debug.Assert(akmSectionGroup != null, "AkmSectionGroup can not be null");
        Settings = akmSectionGroup.Settings;
    }

    public void Save(ConfigurationSaveMode saveMode = ConfigurationSaveMode.Full) {
        cfg.Save(saveMode);
    }
}

我看到保存后,数据出现在配置文件中。但是当应用程序关闭时,配置文件会返回到它的空状态。

【问题讨论】:

    标签: c# config configsection


    【解决方案1】:

    exe 目录下的app.config 是只读的。您必须使用用户特定的位置:

    cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming);
    

    【讨论】:

    • 这会导致异常,指出配置节处理程序中存在错误。部分的属性在被阻止时无法更改。类似的东西。
    • 您的应用程序何时失败,异常情况是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2013-08-20
    相关资源
    最近更新 更多