2012-01-16 67 views
2

我目前正在WPF/.Net项目中工作, 在此项目中,用户可以选择完全更改应用程序的蒙皮, 我正在尝试编写使用配置管理, 提交后的设置,但我似乎并没有能够将新值添加到app.config文件,这里是我的下如何以编程方式更新和保存app.config应用程序设置

Public Sub SetApplicationSetting(pstrAppSettingName As String, pstrAppSettingValue As String) 
    Dim lobjconfig As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 

    lobjconfig.AppSettings.Settings.Add(pstrAppSettingName, pstrAppSettingValue) 
    lobjconfig.Save(ConfigurationSaveMode.Full) 
    ConfigurationManager.RefreshSection("appSettings") 
End Sub 

任何想法的方法?

现在街道上的字是我不能添加到什么是已经存在,所以我吼声,也许我应该更新, 但仍没有之前先删除它,这里是新代码

Dim lobjconfig As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) 

      lobjconfig.AppSettings.Settings.Remove(pstrAppSettingName) 
      lobjconfig.AppSettings.Settings.Add(pstrAppSettingName, pstrAppSettingValue) 


       lobjconfig.AppSettings.Settings.CurrentConfiguration.Save() 
      lobjconfig.Save(ConfigurationSaveMode.Full, True) 

     ConfigurationManager.RefreshSection("appSettings") 
+0

你能分享当你尝试时会发生什么吗? – 2012-01-16 13:14:55

+0

它贯穿每一个everyline罚款,我也检查了pstrAppSettingValue和它的存在,但不知何故它不会被添加到app.config,(我也稍微调整了它,并在保存行的末尾添加了一个True来强制它保存全部)但是什么也没有 – 2012-01-16 13:19:22

+0

咦?你只是说pstrAppSettingValue“在那里”,然后“不会被添加”......这是什么? – 2012-01-16 13:20:58

回答

2

我的猜测是,你正在试图改变所有用户(ConfigurationUserLevel.None)的配置和您可能没有这样做的权利。如果失败了,我会期待一个例外,并且你没有说有人抛出,所以我可能会走错路。

要找到罪魁祸首,你可以试试ConfigurationUserLevel.PerUserRoamingAndLocalConfigurationUserLevel.PerUserRoaming,看看是否更好。

或者,但我怀疑它的确与众不同,你可以得到从某一个位置的配置特别是通过以下行:

Configuration config = ConfigurationManager.OpenExeConfiguration(
          Assembly.GetEntryAssembly().Location); 
+0

这个答案看起来不错,但现在我稍微糊涂了如何输入文件的路径,如果文件在项目内的bin文件夹中,你能帮忙吗? - 预先感谢回答 – 2012-01-16 13:39:09

+1

@AshShafiee:等等,你是否试图更新配置文件,而不是运行时使用的配置文件?运行时,app.config的位置与项目位置中的位置不同。在使用F5运行期间,应用程序将被复制到构建目录和配置文件(yourname.exe.config)中。可以在那里找到更改,或者在系统位置找到更改。 – Abel 2012-01-16 15:20:19

+0

为了更清楚地说明:在使用F5(调试)或Ctrl-F5运行时通过代码更改配置文件将不会更改Visual Studio项目中的app.config。 – Abel 2012-01-16 15:21:55

0

在我看来,如果你没有'皮肤'文件,AppplicationSettings是这个的首选方式。它们允许每个用户和应用程序范围的设置。 http://msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

更新:我想你可能会发现此链接有用的创建设置 http://msdn.microsoft.com/en-us/library/ms171565.aspx

你也可以使用设计器来快速地从用户特定的太应用范围的设置更改。 http://msdn.microsoft.com/en-us/library/aa730869.aspx

也有许多链接在这里SO https://stackoverflow.com/search?q=applicationsettings+c%23

+2

我知道我正在使用应用程序设置哈哈,所以你只是在这里指出一个事实, – 2012-01-16 13:22:30

+0

是什么,这(“ConfigurationUserLevel.None)”然后? – 2012-01-16 13:28:59

+0

是的。抱歉。起初,我以为你试图破解应用程序的app.config文件,作为其他答案表明你的用户可能没有权利。也许你最好在每个用户保存皮肤项目,你有权保存它们。 – kenny 2012-01-16 13:33:44

1

运行在双某些位置的应用程序点击直接或在Visual Studio中按Ctrl + F5,设置上的更改将持久化到构建调试文件夹下的应用程序配置文件(yourapp.exe.config)。通过测试,通过F5(调试)和Ctrl + F5(无需调试运行)在VS中运行应用程序在应用程序配置文件上的更改方面有所不同。

相关问题