2016-12-02 114 views
0

我有一个C#程序,其中包含存储在程序项目设置中的各种设置。由于它是一个命令行程序,这些设置将由用户在user.config文件中更改。我无法弄清楚如何强制它保存所有的默认值。强制所有用户设置保存

调用Properties.Settings.Default.Save();只有当我更新程序中的属性时才起作用,这会破坏持久性设置文件的重点。

如果我运行

Properties.Settings.Default.SomeSetting = "Help"; 
Properties.Settings.Default.Save(); 

在config文件中我会看到类似

< setting name="SomeSetting" serializeAs="String"> 
    <value>Help</value> 
< /setting> 

我想做什么情况是,如果配置文件不存在,创建和存储所有设置。然后用户可以根据需要更改它们。

回答

0

我设法解决这个问题的方法是修改一些现有的代码,我在不同的项目中处理版本升级。

当程序运行时:

if (PropertiesSettings.Default.UpgradeRequired) 
{ 
    Properties.Settings.Default.Upgrade(); 
    Properties.Settings.Default.UpgradeRequired = false; 
    Properties.Settings.Default.Save(); 
    reloadSettings(); 
} 

// Assign settings to themselves and save 
// This keeps settings the same as the defaults even when upgrading but ensures all settings appear in the config file 
private void reloadSettings() 
{ 
    Properties.Settings.Default.Setting1 = Properties.Settings.Default.Setting1; 
    Properties.Settings.Default.Setting2 = Properties.Settings.Default.Setting2; 
    //etc 
    Properties.Settings.Default.Save(); 
} 
0

设置保存在用户AppData特定于给定过程的文件夹中。例如,当应用程序在调试器下运行时,您会得到与独立运行时不同的设置。

我猜想没有简单的方法来使用这些属性设置跨应用程序共享设置。这段代码相当老旧(.NET 2.0甚至之前),所以我认为它的设计并不容易定制,因为最近的代码通常就是这种情况。

我认为这些设置适用于特定应用程序的特定事物,并且如果数据需要跨应用程序共享,那么您应该管理自己的文件。

通常,您可以使用基于XML或JSON的文件,并且如果数据旨在对用户可见或在用户应用程序数据目录的子目录下可见,则数据将被存储(默认情况下)在My Documents的子目录下如果一个普通用户不应该看到这些文件。

+0

这并没有真正回答这个问题。我会为这个问题添加更多的细节。 – MikeS159

+0

嗯,我认为真正的答案几乎是一样的......我想这是不可能的,因为代码的设计方式并不是很容易定制。因此,如果设置不符合您的需要,您必须编写自己的系统。 – Phil1970

+0

另一种可能是使用'PropertyGrid'来允许用户从应用程序内部编辑设置。这样,你会看到所有的属性,如果甚至会比直接编辑文件更方便用户使用。 – Phil1970