첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
0.00MB

▶ ConfigurationHelper.cs

using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;

namespace TestProject
{
    /// <summary>
    /// 구성 헬퍼
    /// </summary>
    public class ConfigurationHelper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 파일 경로
        /// </summary>
        private string configurationFilePath;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 구성 파일 경로 - ConfigurationFilePath

        /// <summary>
        /// 구성 파일 경로
        /// </summary>
        public string ConfigurationFilePath
        {
            get
            {
                return this.configurationFilePath;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - ConfigurationHelper(assembly)

        /// <summary>
        /// 생성자
        /// </summary>
        /// <param name="assembly">어셈블리</param>
        public ConfigurationHelper(Assembly assembly)
        {
            AssemblyName assemblyName = assembly.GetName();

            string projectName       = assemblyName.Name;
            string projectVersion    = assemblyName.Version.ToString();

            this.configurationFilePath = Path.Combine
            (
                Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
                projectName,
                projectVersion,
                $"{projectName}.config"
            );
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 값 설정하기 - SetValue(key, value)

        /// <summary>
        /// 값 설정하기
        /// </summary>
        /// <param name="key">키</param>
        /// <param name="value">값</param>
        /// <returns>처리 결과</returns>
        public bool SetValue(string key, string value)
        {
            try
            {
                Configuration configuration = GetConfiguration();

                if(configuration.AppSettings.Settings.AllKeys.Contains(key))
                {
                    configuration.AppSettings.Settings[key].Value = value;
                }
                else
                {
                    configuration.AppSettings.Settings.Add(key, value);
                }

                configuration.Save(ConfigurationSaveMode.Modified);

                ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);

                return true;
            }
            catch
            {
                return false;
            }
        }

        #endregion
        #region 값 구하기 - GetValue(key)

        /// <summary>
        /// 값 구하기
        /// </summary>
        /// <param name="key">키</param>
        /// <returns>값</returns>
        public string GetValue(string key)
        {
            Configuration configuration = GetConfiguration();

            if(configuration.AppSettings.Settings.AllKeys.Contains(key))
            {
                return configuration.AppSettings.Settings[key].Value;
            }
            else
            {
                return null;
            }
        }

        #endregion
        #region 키 제거하기 - RemoveKey(key)

        /// <summary>
        /// 키 제거하기
        /// </summary>
        /// <param name="key">키</param>
        public void RemoveKey(string key)
        {
            Configuration configuration = GetConfiguration();

            if(configuration.AppSettings.Settings.AllKeys.Contains(key))
            {
                configuration.AppSettings.Settings.Remove(key);

                configuration.Save(ConfigurationSaveMode.Modified);

                ConfigurationManager.RefreshSection(configuration.AppSettings.SectionInformation.Name);
            }
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 구성 구하기 - GetConfiguration()

        /// <summary>
        /// 구성 구하기
        /// </summary>
        /// <returns>구성</returns>
        private Configuration GetConfiguration()
        {
            Configuration configuration;

            if(string.IsNullOrWhiteSpace(this.configurationFilePath))
            {
                configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            }
            else
            {
                ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();

                fileMap.ExeConfigFilename = this.configurationFilePath;

                configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            }

            return configuration;
        }

        #endregion
    }
}

 

▶ Program.cs

using System;
using System.Reflection;

namespace TestProject
{
    /// <summary>
    /// 프로그램
    /// </summary>
    class Program
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Private

        #region 프로그램 시작하기 - Main()

        /// <summary>
        /// 프로그램 시작하기
        /// </summary>
        private static void Main()
        {
            ConfigurationHelper helper = new ConfigurationHelper(Assembly.GetExecutingAssembly());

            helper.SetValue("WIDTH" , "800");
            helper.SetValue("HEIGHT", "600");

            Console.WriteLine(helper.ConfigurationFilePath);
        }

        #endregion
    }
}

 

[생성 구성 파일]

▶ TestProject.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings>
        <add key="WIDTH" value="800" />
        <add key="HEIGHT" value="600" />
    </appSettings>
</configuration>
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요