2014-12-25 1 views
1

WPF 프로젝트를 개발 중입니다. 사용자 설정을 저장하고 싶습니다. 나는 ConfigurationManagerClass를 사용한다. 이 링크 (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx, http://msdn.microsoft.com/en-us/library/ms134265(v=vs.110).aspx)를 읽었습니다. 그런 다음 PerUserRoaming 매개 변수를 사용하기로 결정했습니다. 이 매개 변수에 따르면 설정은 "C : \ Users \ BDagli \ AppData \ Roaming \ DiBASUI \ DiBASUI.vshost.exe_Url_zep32lw2fomt1eij4jb2qhip2cbd211o \ 1.0.0.0 \ user.config"로 작성되어야합니다. 그러나 그것은 창조 될 수 없다. 그리고 예외가 발생합니다..NET 프로젝트에서 PerUserRoaming 매개 변수를 사용하여 구성 파일을 저장할 수 없습니다.

System.Configuration.ConfigurationErrorsException : 에러가있는 appSettings의 구성 부 핸들러를 실행 일어났다. ---> System.InvalidOperationException : 잠긴 경우 ConfigurationSection 속성을 편집 할 수 없습니다. System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates에서 System.Configuration.SectionInformation.VerifyIsEditable()에서 (부울 requireUpdates, ConfigurationSaveMode saveMode 부울 forceSaveAll, ConfigDefinitionUpdates & definitionUpdates, ArrayList를 & configSourceUpdates) --- 내부 예외 스택 추적 엔드 - - System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates (부울 requireUpdates, ConfigurationSaveMode saveMode, 부울 forceSaveAll, ConfigDefinitionUpdates & definitionUpdates, ArrayList를 & configSourceUpdates) System.Configuration.MgmtConfigurationRecord.SaveAs에서 (문자열 파일 이름, ConfigurationSaveMode saveMode, 부울 forceUpdateAll)에서 System.Configuration.Configuration.SaveAsImpl (문자열 파일명 ConfigurationSaveMode saveMode 부울 forceSaveAll) DiBASUI.ConfigurationHelper.AddUpdateAppSettings에서 System.Configuration.Configuration.Save (ConfigurationSaveMode saveMode) 에서 (문자열 키 문자열 값) C시 515,: \ 사용자 \ BDagli 프로젝트 \ 비주얼 스튜디오 2013 \ 문서 \ \ WpfApplication2 \ DiBASUI ConfigurationHelper.cs \

public static void AddUpdateAppSettings(string key, string value) 
    { 
     try 
     { 
      var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming); 
      var settings = configFile.AppSettings.Settings; 
      if (settings[key] == null) 
      { 
       settings.Add(key, value); 
      } 
      else 
      { 
       settings[key].Value = value; 
      } 
      configFile.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); 
     } 
     catch (ConfigurationErrorsException ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

    } 

******************************* 

ConfigurationHelper.AddUpdateAppSettings("rememberMe", "true"); 

어떻게 진행 할 수 다음과 같이 라인 (66)

내 코드는?

AllowExeDefinition을 추가했습니다.

System.InvalidOperationException: {"ConfigurationSection properties cannot be edited when locked."} 

답변

1

this answer에 따르면 :

:

당신은 섹션의 SectionInformation.AllowExeDefinition 값을 설정해야합니다

public static void AddUpdateAppSettings(string key, string value) 
    { 
     try 
     { 
      Configuration configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming); 
      AppSettingsSection appSettings = configFile.AppSettings; 
    error line-> appSettings.SectionInformation.AllowExeDefinition = ConfigurationAllowExeDefinition.MachineToRoamingUser; 
      var settings = appSettings.Settings; 
      if (settings[key] == null) 
      { 
       settings.Add(key, value); 
      } 
      else 
      { 
       settings[key].Value = value; 
      } 
      configFile.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name); 
     } 
     catch (ConfigurationErrorsException ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 

    } 

예외는 다음과 같이 인 발생한다

그래서, 당신 코드는 다음과 같아야합니다
SYSK 73: On the Importance of allowExeDefinition Attribute :

settings.SectionInformation.AllowExeDefinition = 
      ConfigurationAllowExeDefinition.MachineToLocalUser; 

당신은 구성 수준 here (MSDN forums)이 문서에 대한 자세한 정보를 찾을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다.나는 추가했지만 다른 예외가 발생했습니다. 내 질문을 편집하고있다. –

2

문자열 exe 경로를 사용하십시오. 이 방법으로 만 구성을 저장할 수 있습니다.

private void UpdateConfigSection(string sectionName, string value) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location); 
      config.AppSettings.Settings[sectionName].Value = value; 
      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection("appSettings"); 
     } 
관련 문제