Assembly Config

Assembly Config 

요즘엔 전과 달리 월요일이 그리 두렵지 않습니다. 제가 느끼는 시간이 정말 총알처럼 빠른 것 같아요. 월요일 오전에 담배를 한대 피우면서, “아후 월요일이네..” 하고 나면.. 금세 목요일이나 금요일 같은 장소에서 ~! 벌써 목()요일이아.. -_-;” 이런 말을 합니다. 몇 년 전에 누군가가 저에게 너두 내 나이 되바라.. 시간이 빛보다 빨리 갈 것이다.” 라고 말한게 문뜩 기억이 납니다. 아마 그 말을 했던 분의 나이가 정확히 지금의 제 나이인 것 같아요.. 으엉.. _

 

몇 일 전에 필요에 의해서 작성한 코드가 있습니다. .dll 파일로 배포되는 어셈블리 코드 내에서 사용하는 특정 값을 구성 요소로 관리하면 더 좋을 것 같은 경우가 생겼거든요. (사실 그리 큰 문제는 아니었지만, 왠지 소스 코드에 변경될 지도 모르는 값을 박아서 사용하는 게 용서가 안 되는… -_-;) 그래서 별 생각 없이, [assembly file name].dll.config 라는 이름으로 구성요소 파일을 하나 추가하고 <appSettings> 요소 밑에 필요한 값을 <add>해서 사용했습니다.

그런데, 정작 이 구성요소 파일을 코드에서 ConfigurationManager로 읽으려고 하니~ null만 냅다 뱉어 대더라구요. 이게 아닌가 이게 아닌가생각해 보니, 단독 실행형 파일(.exe)의 구성요소만 적용 되더라구요.

 

그리 하야다음과 같은 코드를 작성하게 됐습니다.

public static IDictionary GetConfig(Assembly assm)
{
    string configFile = assm.CodeBase + ".config";
    const string settingNodeName = "assemblySettings";

    XmlDocument xDoc = new XmlDocument();
    xDoc.Load(new XmlTextReader(configFile));

    XmlNodeList nodes = xDoc.GetElementsByTagName(settingNodeName);
    foreach (XmlNode node in nodes)
    {
        if (node.LocalName == settingNodeName)
        {
            DictionarySectionHandler handler = new DictionarySectionHandler();
            return handler.Create(null, null, node) as IDictionary;
        }
    }

    return (null);
}

 

코드는 간단합니다. 어셈블리와 이름이 동일한 .config 파일을 읽어서 IDictionary 형태로 리턴하는 것이죠. 그렇게 되면 이 메서드를 호출하는 코드에서는 구성 요소에서 읽어야 하는 요소 값을 key로 해서 원하는 데이터를 얻어 올 수 있겠죠.

 

혹여그럼 이 메서드의 파라미터로 전달되는 Assembly 정보를 어떻게 가지고 오냐.. 라고 살짝 고민하시는 분들이 계실 텐데.. 그런 분들은 이렇게 하면 됩니다.

 GetConfig(Assembly.GetCallingAssembly()); 

어셈블리는 단독 실행 형태로 사용할 수 없기 때문에 app.config web.config 같은 구성요소 파일을 사용할 수가 없죠. 뭐 굳이 그렇게 쓸 필요가 있냐~~ 라고 생각하시는 분들도 계실 텐데

상황에 따라서 입니다. 다른 애플리케이션에서 언제든지 참조할 수 있는 모듈을 개발해야 한다면, 그리고 그 모듈이 구성요소 파일을 필요로 한다면이런 시나리오에서는 요긴하게 쓰일 수 있을 것입니다.

 

그럼 전 여기서 이만 물러나겠습니다. 즐거운 일요일 보내시기 바랍니다.

감사합니다.  ^o^v

posted by zmeun

이 포스트를 평가해 주세요.

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comments

Add comment


 

biuquote
Loading



Search

Recent comments