2013-11-27 3 views
1

나는 csharp 콘솔 어플리케이션을 작성 중이다. 사용자 입력에 따라 런타임에 app.config 파일을 업데이트하고 싶습니다.런타임에 app.config의 특정 텍스트 바꾸기

때마다 문자열을 다른 문자열로 바꿔야합니다.

사용자가 환경을 선택한 경우 모든 testenvironment가 devenvironment로 바뀌어야합니다.

런타임에 수행하는 방법을 제안하십시오.

+0

http://stackoverflow.com/questions/6150644/change-default-app-config-at-runtime을 살펴 보았습니까? – Dethariel

+0

check http://stackoverflow.com/questions/980440/update-app-config-system-net-setting-at-runtime 및 http://stackoverflow.com/questions/13286916/c-sharp-applicationsettings-how -to-update-app-config first –

+0

구성을 변경하는 코드가 거꾸로 있습니까? 또는 다른 환경에 다른 환경을 배치하십시오. – doctorlove

답변

4

당신은 그렇게하지 않습니다. 하지마. 이제까지. 사용자 설정을 사용하거나 자신 만의 것을 제안하십시오. 사용자 공간 응용 프로그램은 Program Files 폴더에 쓸 수 없습니다. 하지마.

사용자가 선택한 환경을 저장하는 사용자 설정을 만들 수 있습니다. 모든 응용 프로그램 설정을 일반화하여 dev/test간에 변경해야하는 부분을 포함하는 자리 표시자를 포함하고 코드의 해당 부분을 바꿉니다.

예 : 특정 환경에 맞게 로그 파일을 설정하십시오. 이 설정 값은 다음

"[Environment]\MyProgram\Logs" 

수 코드에서 당신은 실제 경로 만들려면이 같은가 someting를 사용하십시오 : 물론

string logPath = Properties.Settings.Default.LogPath.Replace("[Environment]", IsDevEnvironment ? "C:\\DevEnvironment\\Test", "C:\\TestEnvironment"); 

가 여기에 실제 값을 입력 줄을 . 또한 응용 프로그램 또는 사용자 설정에서 가져올 수 있습니다.

1

일반 시나리오에서는 런타임에 구성 값을 변경하는 것이 좋지 않습니다.

하지만 여전히이 요구 사항은 다음의 app.config 파일 업데이트 할 수 있습니다 상황을 극복하기 위해 다른 방법이없는 경우 : 아래

appSettings는의 값을 업데이트하는 코드 예제입니다 :

var config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
if (config.AppSettings == null || config.AppSettings.Settings == null) 
{ 
    return; 
} 

config.AppSettings.Settings["Key"].Value = "My Value"; 
config.Save(ConfigurationSaveMode.Modified, true); 
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 

제안 :가 대신 위의, 나는 XML 또는 텍스트 파일을 만들고 의 AppData에 저장하는 것이 좋습니다 것입니다. 다음에 필요할 때마다 해당 파일에서 데이터를 가져올 수 있습니다.

This은 AppData 폴더에 파일을 쓰는 방법을 보여줍니다.

+0

관리자가 아닌 사용자가 프로그램 파일 폴더에 쓸 수없는 제한 사항을 어떻게 극복 할 수 있다고 생각하십니까? –

+0

그건 그렇고 좋은 사례는 아니라고 말하면서 고맙지 만 MS 코드 작성 지침을 위반하고 대부분의 경우 실패 할 것입니다! 또한 : 사용자 공간 응용 프로그램 (설정 제외)이 프로그램 파일 폴더에 쓸 필요가없는 시나리오는 없습니다. 하나도 아닙니다. 그리고 개발자가 어쨌든 그것을하는 한, Windows는 결코 안전하지 않습니다. –

+0

동일한 케이스가 있으면 AppData에 데이터를 씁니다. – SpiderCode

관련 문제