2016-11-22 8 views
2

내가 .NET 프레임 워크 4.6.1와 C#을 WPF MVVM 응용 프로그램을 개발하고 있어요 저장하고 난의 App.config에 사용자 정의 섹션이 있습니다는 사용자의 app.config 구성 섹션을 수정하고

<configuration> 
    <configSections> 
     <section name="SpeedSection" type="System.Configuration.NameValueSectionHandler" /> 
    </configSections> 
    <SpeedSection> 
     <add key="PrinterSpeed" value="150" /> 
     <add key="CameraSpeed" value="150" /> 
    </SpeedSection> 
</configuration> 

내가 원하는을 내 응용 프로그램에서 PrinterSpeedCameraSpeed을 수정하십시오. 이 코드 시도 :

static void AddUpdateAppSettings(string key, string value) 
{ 
    try 
    { 
     var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     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) 
    { 
     Console.WriteLine("Error writing app settings"); 
    } 
} 

을하지만 AppSettings 부분을 수정하고 있지 않다 때문에 작동하지 않습니다.

어떻게 값을 수정할 수 있습니까?

+0

을하지만, 너를 도울지도 모른다. 매우 어색하고 실망스러운 Microsoft 솔루션에 대한 대안을 살펴 보았습니까? NuGet Urchin 패키지와 같은 훨씬 더 나은 응용 프로그램 구성 대안이 있습니다. – bikeman868

답변

3

System.Configuration.NameValueSectionHandler은 사용하기가 어렵습니다. 당신은 아무것도 건드리지 않고 System.Configuration.AppSettingsSection로 교체 할 수 있습니다 :

<configuration> 
    <configSections> 
     <section name="SpeedSection" type="System.Configuration.AppSettingsSection" /> 
    </configSections> 
    <SpeedSection> 
     <add key="PrinterSpeed" value="150" /> 
     <add key="CameraSpeed" value="150" /> 
    </SpeedSection> 
</configuration> 

을 그리고 다음과 같이 방법을 변경 : 정말 질문에 대한 답변 아니기 때문에 내가 주석으로이를 추가하고

static void AddUpdateAppSettings(string key, string value) 
{ 
    try 
    { 
     var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     var settings = ((AppSettingsSection) configFile.GetSection("SpeedSection")).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) 
    { 
     Console.WriteLine("Error writing app settings"); 
    } 
} 
+0

'((AppSettingsSection) configFile.GetSection ("SpeedSection")). 설정; 그리고 오류 : 'System.Configuration.KeyValueInternalCollection'을 'System.Configuration.AppSettingsSection'으로 변환 할 수 없습니다. ' – VansFannel

+0

나는이 코드를 대답에 묘사 된 것과 똑같이 테스트하고 작동하도록했다. 어쩌면 당신이 \ 뭔가를 변경했습니다? – Evk

+0

예, 죄송합니다. 그건 내 실수 였어. – VansFannel

0

ConfigurationSection 클래스를 사용해야합니다. 이 자습서는 다음을 도울 수 있습니다. https://msdn.microsoft.com/en-us/library/2tw134k3.aspx

+0

튜토리얼을 이해했는지 모르겠지만 해당 구성 데이터에 액세스하는 방법을 알고 있지만이를 수정하고 App.config에서 변경 사항을 저장하는 방법을 모르겠습니다. – VansFannel

+0

코드에서 AppSettings 섹션에 액세스하여 편집 중입니다. var settings = configFile.AppSettings.Settings; – Sudet

+0

이 작업을 수행하는 대신 사용자 지정 구성 섹션 클래스를 만들고SpeedSection settings = ConfigurationManager.GetSection ("SpeedSection") SpeedSection으로 액세스해야합니다. 그런 다음 바로 지금 수행하고있는 것처럼 저장할 수 있습니다. – Sudet