在 .NET .config 文件中读取和写入值

2024-03-17

我想对 user.config 文件使用自定义路径,而不是让 .NET 从默认位置读取它。

我像这样打开文件:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = String.Format("{0}\\user.config",AppDataPath);
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.PerUserRoamingAndLocal);

但我不知道如何实际从中读取设置,当我尝试通过 AppData 或 ConfigurationSection 获取值时,出现编译错误,指出这些值无法访问。

我是否需要创建某种包装类才能正确使用数据?


我最近遇到了类似的问题,我必须将读取设置文件的位置从 AppData 中的默认位置更改为 Application 目录。我的解决方案是创建我自己的设置文件,该文件源自应用程序设置库 http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.aspx其中指定了一个自定义设置提供者 http://msdn.microsoft.com/en-us/library/system.configuration.settingsprovider.aspx。虽然这个解决方案一开始感觉有点大材小用,但我发现它比我预期的更灵活、更易于维护。

Update:

设置文件示例:

public class BaseSettings : ApplicationSettingsBase
{
    protected BaseSettings(string settingsKey)
       { SettingsKey = settingsKey.ToLower(); }


    public override void Upgrade()
    {
         if (!UpgradeRequired)
             return;
         base.Upgrade();
         UpgradeRequired = false;
         Save();
    }


    [SettingsProvider(typeof(MySettingsProvider)), UserScopedSetting]
    [DefaultSettingValue("True")]
    public bool UpgradeRequired
    {
         get { return (bool)this["UpgradeRequired"]; }
         set { this["UpgradeRequired"] = value; }
    }
}

设置提供者示例:

public sealed class MySettingsProvider : SettingsProvider
{
    public override string ApplicationName { get { return Application.ProductName; } set { } }
    public override string Name { get { return "MySettingsProvider"; } }


    public override void Initialize(string name, NameValueCollection col)
         { base.Initialize(ApplicationName, col); }


    public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection propertyValues)
    {
       // Use an XmlWriter to write settings to file. Iterate PropertyValueCollection and use the SerializedValue member
    }


    public override SettingsPropertyValueCollection GetPropertyValues(SettingsContext context, SettingsPropertyCollection props)
    {
       // Read values from settings file into a PropertyValuesCollection and return it
    }


    static MySettingsProvider()
    {
        appSettingsPath_ = Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, settingsFileName_);

        settingsXml_ = new XmlDocument();
        try { settingsXml_.Load(appSettingsPath_); }
        catch (XmlException) { CreateXmlFile_(settingsXml_); } //Invalid settings file
        catch (FileNotFoundException) { CreateXmlFile_(settingsXml_); } // Missing settings file
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET .config 文件中读取和写入值 的相关文章

随机推荐