C# & .NET

[C# UWP] UWP에선 ConfiguraionManager 대신 이걸 사용하세요

카루-R 2022. 2. 23. 10:44
반응형

환영합니다, Rolling Ress의 카루입니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<connectionStrings>
		<add name="ChatDB" connectionString="**"/>
	</connectionStrings>
</configuration>

보통 앱을 개발할 때, SQL 등의 connectionString은 app.config 에 넣어두죠. 그리고 C# 에서는 ConfigurationManager을 이용해 불러들입니다.

그게 이상처럼만 잘 된다면 얼마나 좋을까요. 계속 오류가 났습니다. 보아하니 UWP 플랫폼에서는 특유의 폐쇄성으로 인해 ConfigurationManager가 제대로 동작하지 않는다는 모양이에요. File 클래스도 사용하지 못해서 Windows.Storage의 클래스들을 사용해야만 하는데, 여러모로 불편합니다.

 

ConfigurationManager and AppSettings in universal (UWP) app

I would like to store an API key in a configuration file without checking it into source control, and read the data in my UWP app. A common solution is to store the key in .config file (such as app.

stackoverflow.com

그래서 stackoverflow를 뒤져봤더니 소스컨트롤에 포함되지 않는 파일을 만들어서 읽는 방식을 사용하더군요.

그래서 저도 해봤습니다. connection.txt 파일을 만들고 .gitignore에 추가해주세요. 그럼 commit시 반영되지 않습니다.

var connectiontxt = await StorageFile.GetFileFromApplicationUriAsync(new("ms-appx:///connection.txt"));
string? connectionString = await FileIO.ReadTextAsync(connectiontxt);
if (connectionString == null)
    throw new NullReferenceException("ConnectionString is null.");
this.connectionString = connectionString;

참고로 C# 9 이상에서만 동작합니다. 그 이하의 환경에서는 new 뒤에 Uri를 명시해주세요. 아무튼, 이런 식으로 간단하게 사용할 수 있습니다.

추가로, Resources를 사용하는 방법이 있습니다. 아예 리소스로 넣어버리는 건데, https://amadeusw.com/iot/custom-resource-files-in-uwp-windows-10 를 참고하시면 이해가 빠를 것 같네요.

 

Custom resource files in UWP

I made a rookie mistake of hardcoding the weather service API token (key) into a public github repo, and did it all live on camera when recording an episode of Coding with Amadeus: Smart Mirror. I should have stored the token in an untracked resource file,

amadeusw.com

 

 
반응형