Thursday, January 15, 2009

사용자 지정 응용프로그램 구성 파일 사용하기 (Using the custom location App.Config)

안녕하세요, 최덕순(Scott)입니다.

BizTalk 프로젝트를 하다보면 사용자 정의 컴포넌트를 사용할때가 있습니다. 어댑터가 지원되지 않는 시스템 이라던가 추가적인 기능을 사용해야 한다던가.. 이럴때 연결문자열이라던가 기타 자주 변경되는 값은 App.Config를 사용하게 됩니다.




그런데 BizTalk 프로젝트에 종속된 사용자 컴포넌트(.dll)로 배포되었을때에는 실행 파일의 Config를 따라가기 때문에 BizTalk Server의 실행 파일의 구성파일인 BTSNTSvc.exe.config를 사용하게 됩니다.




그러다보면.. BizTalk Server의 응용프로그램 구성파일을 사용하지 않고 사용자가 임의로 지정한 구성파일을 사용하고 싶을때가 있습니다. 그래서 구글링을 해보았습니다.

Ohad's Blog를 찾아보니 매우 쉬운 방법으로 변경할 수 있게 되어있더군요..

1. 구성파일 생성



2. AppSettingsReader를 다른 위치로 구성파일을 지정

AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,”c:\\ohad.config”);


3. System.COnfigurationSettings.AppSettings를 사용

string s=System.Configuration.ConfigurationSettings.AppSettings["name"];
MessageBox.Show(s);


그런데.. APP_CONFIG_FILE이 바라보는 위차가 변경되었는데도..
이상하게도 저는 되지 않더군요.. 다시 구글링을 해보았습니다.

bojordan.com 이라는 블로그를 다시 찾았습니다. 구성파일의 위치를 변경하는 다른 방법이 있더군요.

ExeConfigurationFileMap을 생성하여 변경하는 방법이 나와있더군요..

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = "MyDifferentConfig.xml";
Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(configFileMap,
ConfigurationUserLevel.None);


구성파일 값을 가져오는 방법이 약간 틀립니다.

string myConfigValue = null;
KeyValueConfigurationObject kvConfigObj =
config.AppSettings.Settings["myConfigKey"];
if (null != kvConfigObj)
{
myConfigValue = kvConfigObj.Value;
}


이 코드를 보고 간단하게 메소드를 생성하였더니 문제없이 사용자 정의 응용프로그램 구성파일을 읽어오더군요..

public static string ReadSettings(string key)
{
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = @"C:\Work\Custom.Config";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);

return config.AppSettings.Settings[key].Value;
}


No comments: