5

我正在使用 .NET 4.0,我想使用该app.config文件来存储相同的参数设置。我执行以下操作。我使用Settings项目属性中的选项卡来创建我的参数。

这会在app.config文件中添加如下信息:

<MyApp.Properties.Settings>
      <setting name="param1" serializeAs="String">
        <value>True</value>
      </setting>
<MyApp.Properties.Settings>

在我的视图模型中(在我的代码中),我可以通过以下方式访问信息:

bool myBool = MyApp.Properties.Default.param1;

当我尝试更改配置文件中的值时,我尝试这样做:

Properties.Settings.Default.param1 = false;

但这会导致错误,即param1只读。

那么如何从我的代码中更新我的配置文件呢?

4

4 回答 4

11

这是我为“applicationSettings”部分更新或添加条目到 app.config 的功能。可能有更好的方法,但这对我有用。如果有人可以提出更好的方法,请分享,我们将一直在寻找更好的方法。

    static string APPNODE = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Properties.Settings";
    static DateTime now = DateTime.Now;
    Utilities.UpdateConfig(APPNODE, "lastQueryTime", now.ToString());

    static public void UpdateConfig(string section, string key, string value)
    {
        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

        ClientSettingsSection applicationSettingsSection = (ClientSettingsSection)config.SectionGroups["applicationSettings"].Sections[section];
        SettingElement element = applicationSettingsSection.Settings.Get(key);

        if (null != element)
        {
            applicationSettingsSection.Settings.Remove(element);
            element.Value.ValueXml.InnerXml = value;
            applicationSettingsSection.Settings.Add(element);
        }
        else
        {
            element = new SettingElement(key, SettingsSerializeAs.String);
            element.Value = new SettingValueElement();
            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
            element.Value.ValueXml = doc.CreateElement("value");

            element.Value.ValueXml.InnerXml = value;
            applicationSettingsSection.Settings.Add(element);
        }

        config.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection("applicationSettings");            
    }
于 2013-04-18T18:48:11.547 回答
5

Well, I read the link of Hari Gillala, in which one user suggested to edit directly the app.config file, that is a xml file.

So in project properties-->settings I create the parameters that I need. Then, to load a parameter in code I do the following:

_myViewModelProperty = MyApp.Properties.Settings.Default.MyParam1;

In this way, I can read easily the information of the config parameter. Is typed, so in disign time I can see if the asign is correct or not.

To update de config file, I edit the app.config file with the xml libraries of .NET.

    System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
    xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
    System.Xml.XmlNode node;
    node = xml.SelectSingleNode("configuration/applicationSettings/MyApp.Properties.Settings/setting[@name='myparam1']");
    node.ChildNodes[0].InnerText = myNewValue;
    xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

In this way, I create a xml document (xml variable) and load the information of the app.config file. Then, I search for the node that I want to update, update its information (InnerText property) and finally I save the changes.

In this way, I can update the app.config. It is what I want, because in a portable application, only one user will use it, and I want that the configuration is applied in any computer in which I run the application.

于 2012-11-09T09:51:01.950 回答
3

您应该使用Properties.Settings来执行此操作。您可以查看此文档以获取更多信息。

//modify
Properties.Settings.Default.param1 = false;
//save the setting
Properties.Settings.Default.Save();

请注意,如果您的设置具有用户范围,它们必须是可写的,那么属性将保存在其他地方,而不是在您的本地配置文件中。有关详细信息,请参见此处

在评论和进一步搜索讨论后编辑:

我的建议是切换到AppSettings以达到预期的效果。那是因为,经过一些搜索,我发现 appsettings 更改了 Application Data 文件夹中的 .config 文件(在我的机器上运行一些测试确认了这一点)。

看看这个问题的答案中的评论。

我不确定是否有一些解决方法,但是如果您希望您的应用程序具有可移植的 app.config 文件,我认为唯一的方法是切换到AppSettings,我确信可以保存找到的 app.config 更改在程序文件夹中。

编辑2:可能的解决方案

我找到了一种可能的解决方案来使您的应用程序可移植!您可以更改 Settings 使用的 Provider 以保存应用程序的设置,从而创建自定义 Provider。

这个问题的答案提供了一个代码链接,以使 applicationsettings 可移植。我想你试试看

于 2012-11-08T10:19:18.857 回答
2

将您的设置标记为用户设置。

详细文章: http: //www.codeproject.com/Articles/25829/User-Settings-Applied

于 2012-11-08T10:16:59.623 回答