2009-08-10 6 views
9

C# .NET 2.0 Windows 응용 프로그램을 사용하고 있습니다.AppSettings 변경 내 응용 프로그램을 다시 시작해야합니다 어떻게 피할 수 있습니까?

그리고 내 응용 프로그램 설정에 app.config를 사용하고 있습니다.

그러나 AppSettings의 변경 내용은 런타임을 반영하지 않으므로 응용 프로그램을 다시 시작해야합니다.

어떻게 피할 수 있습니까?

다음은 응용 프로그램 설정을 읽고 쓰는 데 사용한 코드 단편입니다.

나는이

string temp = ConfigurationManager.AppSettings.Get(key); 

내가 노드 당신은 새로

ConfigurationManager.RefreshSection("appSettings")
를 호출 시도 할 수 있었다 현재 구성/appSettings는 노드

node.Attributes["value"].Value = value; 
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

답변

23

을하다이 같은 값을 업데이트하고있어 같은 설정을 읽고 있어요 디스크에서 파일의 AppSettings 섹션. 일단 그들이 새로 고쳐지면, 당신은 새로운 가치를 읽을 수 있어야합니다.

방금 ​​테스트 해본 결과 실제로 작동합니다.

+1

+1 매우 멋진 - 당신이 할 수 있는지 몰랐습니다! –

+4

RefreshSection이 작동하지 않습니다. –

+1

작업 중 !!! – shahjapan

1

그나마 사용하는 대신, 설정을 읽을의 ConfigurationManager를 사용

 System.Configuration.ConfigurationManager.OpenExeConfiguration(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile).AppSettings.Settings["value"]; 
+0

네, 가능 합니다만, 가장 효율적인 방법은 아닙니다. – shahjapan

+2

여기에도 ConfigurationManager를 사용합니다. – SwissCoder

3

다른 방법으로, 싱글 '옵션'응용 프로그램 설정에 보유하고 읽기를 수행하기를 만들 수 있습니다/당신을 위해 씁니다. 로드 된 후에는 .config를 변경하더라도 다시로드 할 필요가 없으며 단순히 싱글 톤에 속성을 설정하고 .Save() 메서드를 호출하면됩니다.

설정의 '런타임'버전은 싱글 톤이므로 디스크에서 읽을 필요가 없습니다.

+0

+1, 내 opnion humild 있음, 지금까지 최고의 솔루션입니다. – Cleiton

1
ConfigurationManager.RefreshSection("appSettings"); 

작품!

그러나 우리는 디버그 모드에있는 경우, 구성 파일이 xxxxx.vshost.exe.config xxxxx는 프로젝트 이름입니다, 호출 할 수 있음을주의하십시오.