태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


2007/08/30 01:14

.NET 2.0 C#의 Configuration Manager

말그대로 컨픽 파일을 손수 만들 필요없이 자동으로 해줍니다.

과연 얼만큼 자동으로 해줄까요?

일단 컨픽 파일은 아래와 같은 XML파일입니다.


윈9X에서는 INI파일을 사용했지만 시대가 시대인만큼 컨픽 파일에서도 XML을 쓰는군요.

이 부분이 바로 우리 컨픽 내용입니다.

소스를 통해서 볼까요?

참고로 프로젝트 레퍼런스에서 System.configuration을 추가해야 된답니다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Reflection;
namespace ConfigTest
{
	public class MySection : ConfigurationSection
	{
		[ConfigurationProperty("fileName", DefaultValue = "default.txt")]
		[StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
		public string FileName
		{
			get
			{
				return (string)this["fileName"];
			}
			set
			{
				this["fileName"] = value;
			}
		}

		[ConfigurationProperty("maxUsers", DefaultValue = (long)10000)]
		[LongValidator(MinValue = 1, MaxValue = 1000000, ExcludeRange = false)]
		public long MaxUsers
		{
			get
			{
				return (long)this["maxUsers"];
			}
			set
			{
				this["maxUsers"] = value;
			}
		}
	}

	class Program
	{
		static void CreateSection()
		{
			try
			{
				const string MySectionName = "MySection";
				MySection customSection;

				// open config file
				Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

				if (config.Sections[MySectionName] == null)
				{
					customSection = new MySection();

					config.Sections.Add(MySectionName, customSection);

					customSection.SectionInformation.ForceSave = true;
					config.Save(ConfigurationSaveMode.Full);
				}

				// read
				MySection section = config.Sections[MySectionName] as MySection;

				Console.WriteLine(section.FileName);

				// modify
				section.FileName = "new_file.txt";

				config.Save(ConfigurationSaveMode.Full);

				Console.WriteLine(section.FileName);
			}
			catch (ConfigurationErrorsException err)
			{
				Console.WriteLine(err.ToString());
			}
		}

		static void Main(string[] args)
		{
			CreateSection();
		}
	}
}
C#의 재미있는 기능 중 하나인 리플렉션을 사용했군요. ConfigurationProperty를 이용해서 어떤 이름으로 저장할 것인지, 게다가 디폴트 값까지 지정할 수 있습니다.

아래 Validator는 ASP.NET에서나 보던 것이군요. ASP.NET과 마찬가지로 문자열에서 안되는 문자라던지 정수형에서 변수 값 범위 등을 설정할 수 있습니다.

별다른 변수 생성을 통해서는 안되고 저런식으로 '리플렉션과 프로퍼티'를 이용해야 한답니다. 개인적으로 프로퍼티를 잘 사용하는 편은 아니지만 이만큼 편하다면 어쩔 수 없지요.

아무튼 저런식으로 지정하고 나면, 클래스를 통채로 저장하는 듯한 기분입니다. 클래스 내에서 지정만 해주면 저장하고 읽는 부분은 매우 간단합니다.

CreateSection() 메소드에서는 컨픽 파일을 열고 - 없으면 생성한 후 - 컨픽을 로드한 후, 다시 수정하고 저장하고 값을 확인하는 테스트를 합니다.

참 편리하죠?

참고:
http://msdn2.microsoft.com/en-us/library/system.configuration.configurationpropertyattribute(vs.80).aspx

Trackback 0 Comment 0