2012-01-16 2 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 

какие-либо идеи?

Теперь слово на улице, что я не могу добавить к тому, что уже есть, поэтому я thougth может быть, я должен удалить его перед обновлением, , но все еще ничего, вот новый код

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

Не могли бы вы поделиться тем, что происходит, когда вы пытаетесь? –

+0

Он проходит через каждую строчку в порядке, я также проверяю pstrAppSettingValue и его там, но почему-то он не добавляется в app.config (я также немного изменил его и добавил True в конце строки Save, чтобы заставить его чтобы сохранить все), но все равно ничего –

+0

А? Вы только что сказали, что pstrAppSettingValue «есть», а затем «не добавляется» ... что это такое? –

ответ

2

Я предполагаю, что вы пытаетесь изменить конфигурацию для всех пользователей (ConfigurationUserLevel.None), и что вы не могли бы иметь право сделать это. Я ожидал бы исключения, если это не удастся, и вы не сказали, что кто-то был брошен, поэтому я могу ошибиться.

Чтобы найти преступника, вы можете попробовать ConfigurationUserLevel.PerUserRoamingAndLocal или ConfigurationUserLevel.PerUserRoaming и посмотреть, работает ли это лучше.

В качестве альтернативы, но я сомневаюсь, что это делает разницу, вы можете получать конфигурацию из определенного местоположения в частности, используя следующую строку:

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

Этот ответ выглядит хорошо, но теперь я немного запутался, как набирать путь к файлу, если файл находится в папке bin в проекте, Вы можете помочь с этим? - Заранее спасибо за ответ –

+1

@AshShafiee: Подождите, вы пытаетесь обновить файл конфигурации, который не является файлом конфигурации, который использовался во время работы? Когда вы запустите, расположение app.config отличается от местоположения вашего проекта. Во время работы с F5 ваше приложение копируется в каталог сборки и файл конфигурации (yourname.exe.config). Изменения можно найти там или в расположении системы. – Abel

+0

Чтобы сделать это более понятным: изменение файла конфигурации с помощью кода во время работы с F5 (debug) или Ctrl-F5 не изменит файл app.config в вашем проекте Visual Studio. – Abel

0

На мой взгляд, AppplicationSettings являются предпочтительным способом для этого, если у вас нет файла «skin». Они позволяют использовать настройки для каждого пользователя и приложения. http://msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

UPDATE: Я думаю, что вы могли бы найти эту ссылку полезно для создания настроек 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

Я знаю, что я использую настройку приложения lol, так что вы просто указываете на то, что здесь –

+0

- это то, что это "(ConfigurationUserLevel.None)" тогда ??? –

+0

Да. Прости. Сначала я думал, что вы пытаетесь взломать файл app.config приложения, который, поскольку другой ответ указывает, что у вашего пользователя могут не быть прав. Возможно, вам лучше сохранить элементы скидок в зависимости от пользователя, где у вас будут права на их сохранение. – kenny

1

Запустите приложение в некотором месте, дважды щелкнув по нему непосредственно или Ctrl + F5 в Visual Studio, изменения в настройках будут сохраняться в файле конфигурации приложения (yourapp.exe.config) в папке отладки сборки. Благодаря тестированию запуск приложения через VS через F5 (debug) и Ctrl + F5 (запуск без отладки) отличается от изменений в конфигурационном файле приложения.

Смежные вопросы