728x90
반응형
728x170
▶ 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
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] 닷넷 프레임워크 버전 구하기 (0) | 2022.01.09 |
---|---|
[C#/COMMON] GetSystemMetrics API 함수를 사용해 터치 이용 가능 여부 구하기 (0) | 2022.01.08 |
[C#/COMMON] 누겟 설치 : AudioSwitcher.AudioApi.CoreAudio (0) | 2022.01.08 |
[C#/COMMON] 누겟 설치 : AudioSwitcher.AudioApi (0) | 2022.01.08 |
[C#/COMMON] 누겟 설치 : NAudio (0) | 2022.01.08 |
[C#/COMMON] Enumerable 클래스 : Repeat 정적 메소드를 사용해 값을 초기화한 배열 구하기 (0) | 2022.01.08 |
[C#/COMMON] MarshalAsAttribute 클래스 : 고정 크기 배열 사용하기 (0) | 2022.01.08 |
[C#/COMMON] 파일 저장소 사용하기 (0) | 2022.01.02 |
[C#/COMMON] Stream 클래스 : 스트림 복사하기 (0) | 2022.01.01 |
[C#/COMMON/.NET5] 누겟 설치 : System.Management (0) | 2021.12.26 |
댓글을 달아 주세요