본문 바로가기

Programing/닷넷

애플리케이션 설정(app.config)

닷넷에서는 애플리케이션의 설정을 외부에서 설정하기 쉽게 하기 위해서 설정파일을 이용할 수 있게 되어 있다.

이름은 app.config / web.config 등 다양하다.


샘플(콘솔 애플리케이션)

1. 우선 프로젝트를 생성한다.

2. 프로젝트 오른쪽 클릭 > 속성 > 설정 > "기본 설정 파일을 만들려면 여기를 클릭하십시오." 선택

3. SettingSome이라는 이름에 값은 SomeValue를 선택하면 app.config가 생성된다.

 참고로 범위라는 필드는 '사용자'와 '응용 프로그램'이 있는데, 응용 프로그램을 선택하면 읽기전용이 되어 버린다.

4. Program.cs를 열어 아래와 같이 코딩을 하고...

using System;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine(Properties.Settings.Default.SettingSome);

        }

    }

}

5. 실행을 하면... 프로퍼티에서 출력한 값이 찍힌다.


6. 빌드된 곳에 가보면... app.config는 없고 [출력프로젝트명].exe이름과 동일한 [출력프로젝트명].config가 있다.


7. 이 파일을 열어 편집을 하고



8. 다시 실행해보면, 실행 결과가 바뀐다.



Q1. ConsoleApplication1.exe.config가 실수로 삭제된다면?

 - 파일이 없으면 어셈블리(바이너리파일)에 저장되어 있는 기본적으로 설정된 값이 찍힌다. 이 데이터는 Settings.Designer.cs에 있다. DefaultSettingValueAttribute라는 속성에 의해 "SomeValue"가 지정되어 있는 것이 보인다.

namespace ConsoleApplication1.Properties {

   

   

    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]

    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]

    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {

       

    // ...       

        [global::System.Configuration.UserScopedSettingAttribute()]

        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

        [global::System.Configuration.DefaultSettingValueAttribute("SomeValue")]

        public string SettingSome {

            get {

                return ((string)(this["SettingSome"]));

            }

            set {

                this["SettingSome"] = value;

            }

        }

    }

}

 따라서 설정 파일이 없다고 해서 예외가 발생하지는 않게 구성되어 있음을 알 수 있다.


닷넷 버전에 따라.

 - versions 1.0 and 1.1 버전: System.Configuration.ConfigurationSettings 을 사용

 - versions 2.0 + : System.Configuration.ConfigurationManager 이나 WebConfigurationManager를 사용
                             (각각은 system.configuration.dll 이나 system.web.dll에 구현되어 있기에 참조에 추가해주어야 한다.)


값을 저장하려면?

물론 위에서 언급했듯이 범위가 '사용자'로 되어 있어야 저장이 가능하다. (그 이유는 아래를 읽어보면 알 수 있다.)

저장을 하기 위해서는 아래와 같이 Save메소드를 호출하면 된다.

Properties.Settings.Default.Save();

 그런데 Vista OS 이후 사용자라면제대로 작동이 되지 않을 것이다.

 아무리 봐도 실행파일 근처에 있는 애플리케이션이름.exe.config 파일의 내용은 변함이 없음을 알 수 있다. 원인은 보안이 강화되면서 Programs Files 디렉토리에 일반 권한으로 쓰기가 어려워졌기 때문이다. (보통 애플리케이션을 설치하고 나면 실행파일의 위치에는 쓰기를 위해서는 권한이 필요하다.) 따라서 윈도우는 사용자의 데이터를 저장하기 위해 "C:\Documents and Settings\[사용자ID]\Local Settings\Application Data" 경로를 이용하게 되었다.

 참고로 서브디렉토리 이하에 어떤 규칙에 의해 저장이 되는데, Application Data 이하 저장되는 경로는 어셈플리정보에 따라 달라지는데(AssemblyInfo.cs 참조), AssemblyCompany가 설정되지 않았다면 [프로젝트명]이라는 폴더아래에 생긴다.
만약 회사정보가 설정되어 있다면 그 이름 아래에 생긴다.

예)

C:\Users\namo\AppData\Local\SQLServerNDT\SQLServerNDT.exe_Url_vgypzeg3gd1rab2knkczvry4m3ah1wdi\1.0.0.0\user.config

 회사정보가 NamoCompany로 설정이되면 아래와 같이 바뀐다.

C:\Users\namo\AppData\Local\NamoCompany\SQLServerNDT.exe_Url_vgypzeg3gd1rab2knkczvry4m3ah1wdi\1.0.0.0\user.config


읽을 거리

 - [C#] app.config 파일 사용법 :: 네이버 블로그

 - Using Settings in C# by Matt Stoecker, August 2006

'Programing > 닷넷' 카테고리의 다른 글

[ASP.net] MVC 2  (0) 2013.01.28
윈폼::ESC를 눌러 닫기  (0) 2013.01.11
ObjectDumper  (0) 2013.01.10
Microsoft Chart Controls (차트컨트롤)  (0) 2013.01.10
윈폼 다국어(i18n) 개발하기 - Best Practice  (1) 2013.01.09