2012-07-15 3 views
10

나중에 사용할 수 있도록 일부 설정을 구성 파일에 저장하려고합니다. 이제C# - app config가 변경되지 않습니다.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["username"].Value = m_strUserName; 

// I also tried - 
//config.AppSettings.Settings.Remove("username"); 
//config.AppSettings.Settings.Add("username", m_strUserName); 

config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 

- - 은 내가 모든 자습서에 표시되는 일반 코드를 사용하기 위해 노력하고있어 파일 "... vshost.exe.config" "디버그"에 - 나는 실행에 그것을 볼 수 있습니다 폴더가 변경되면 응용 프로그램을 닫을 때 변경 사항이 모두 삭제됩니다. 어떻게해야합니까?

답변

28

일반 exe 구성 파일을 사용하여 테스트하려면 프로젝트 속성 메뉴의 "디버그"탭에서 "Visual Studio 호스팅 프로세스 사용"상자의 선택을 취소하십시오. 그러면 Visual Studio에서 vshost.exe 파일을 더 이상 사용하지 않고 올바른 설정 파일이 사용됩니다.

enter image description here

+0

+1 좋은 답변 Scott,하지만이 작은 깃발을 잊어 버리는 경향이 있고 때로는 결과가 매우 짜증나기 때문에 나는 이것을 망칠 것을 선호합니다. http://blogs.msdn.com/b/dtemp/archive/2004/08/17/215764.aspx – Steve

+0

vshost와 실제 파일의 차이점은 무엇입니까? 깃발을 사용하는 것이 왜 그렇게 중요한가요? – TamarG

+0

그의 의견에 제공된 링크 steve를 읽습니다. vshost 프로세스가 무엇인지 설명합니다. –

9

응용 프로그램을 최종 사용자에게 배포하면 vshost.config가 없습니다.
변경 사항이 실제 exe.config에 적용됩니다. 따라서 걱정할 필요가 없습니다.

디버그 세션에서 응용 프로그램을 빌드하면 프로젝트에있는 app.config 파일이 출력 디렉터리로 복사됩니다. 그런 다음이 구성 파일이 vshost.config에도 복사됩니다. 이렇게하면 app.config의 내용이 vshost.exe.config 파일의 디버그 세션 중 변경된 내용을 덮어 씁니다.

그러나 이런 종류의 정보를 응용 프로그램 구성에 쓰는 것은 나쁜 습관이라고 말합니다. 구성 파일은 일반적으로 응용 프로그램의 수명 동안 변경되지 않는 영구 구성을 저장하는 데에만 사용해야합니다. 예를 들어, 연결 설정은 일반적으로 변경하지 않고 하드 코딩하지 않기 때문에 거기에 저장할 수있는 유효한 정보입니다.

사용자 이름과 같은 설정은 대신 user.config를 사용해야합니다. 이 설정은 사용자 단위/앱 단위이며 읽기/쓰기 액세스가 허용됩니다.

+0

하지만 지금은 그것을 디버깅해야한다 ... 그리고 왜 vshost.config 변경 사항을 저장하지 않습니다? – TamarG

+0

@tamarg'\ Debug' 폴더 안에'\ bin' 폴더를 열고 실행 파일을 수동으로 실행하여 @ Steve의 답을 테스트 할 수 있습니다. 디버그 프로세스는 매번 동일한 임시 파일에서 시작된다는 것을 기억해야합니다. –

+0

나는 대답을했을지 모르지만 나는 이것에 +1을 준다! –

관련 문제