C # .NET에서 App.config는 무엇입니까? 사용 방법?


179

데이터베이스 파일이 Excel 통합 문서 인 C # .NET에서 프로젝트를 수행했습니다. 연결 문자열의 위치는 코딩에 하드 코딩되어 있으므로 시스템에 설치하는 데 문제가 없지만 다른 시스템에는 문제가 있습니다.

응용 프로그램 설정이 완료된 후 사용자에게 경로를 한 번 설정하라는 메시지가 표시됩니까?

내가 얻은 대답은 "App.Config 사용"이었습니다 ... 누구나이 App.config가 무엇이며 여기에서 내 컨텍스트에서 사용하는 방법을 말할 수 있습니까?


답변:


190

가장 간단하게 app.config는 많은 사전 정의 된 구성 섹션이 있으며 사용자 정의 구성 섹션을 지원하는 XML 파일입니다. "구성 섹션"은 일부 유형의 정보를 저장하기위한 스키마가 포함 된 XML 스 니펫입니다.

connectionStrings또는 같은 내장 구성 섹션을 사용하여 설정을 구성 할 수 있습니다.appSettings . 사용자 정의 구성 섹션을 추가 할 수 있습니다. 이것은 고급 주제이지만 강력한 형식의 구성 파일을 작성하는 데 매우 강력합니다.

웹 응용 프로그램에는 일반적으로 web.config가 있고 Windows GUI / 서비스 응용 프로그램에는 app.config 파일이 있습니다.

응용 프로그램 수준 구성 파일은 전역 구성 파일 (예 : machine.config)의 설정을 상속합니다.

App.Config에서 읽기

연결 문자열에는 사용할 수있는 미리 정의 된 스키마가 있습니다. 이 작은 스 니펫은 실제로 유효한 app.config (또는 web.config) 파일입니다.

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

app.config를 정의한 후에는 ConfigurationManager 클래스를 사용하여 코드에서 읽을 수 있습니다 . 장황한 MSDN 예제에 겁 먹지 마십시오. 실제로는 매우 간단합니다.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

App.Config에 쓰기

* .config 파일을 자주 변경하는 것은 좋은 생각이 아니지만 일회성 설정 만 수행하려는 것처럼 들립니다.

런타임시 * .config 파일 의 섹션 을 업데이트하는 방법을 설명하는 런타임시 연결 문자열 변경 및 app.config 다시로드를 참조하십시오 connectionStrings.

이상적인 설치 프로그램에서 이러한 구성 변경을 수행하는 것이 이상적입니다.

런타임시 App.Config의 위치

Q : <value>app.config에서 수동으로 변경하고 저장 한 다음 닫습니다. 이제 bin 폴더로 이동하여 여기에서 .exe 파일을 시작할 때 적용된 변경 사항이 반영되지 않는 이유는 무엇입니까?

A : 응용 프로그램을 컴파일하면 app.config가 exe와 일치하는 이름으로 bin 디렉토리 1에 복사됩니다 . 예를 들어, exe의 이름이 "test.exe"인 경우 bin 디렉토리에 "text.exe.config"가 있어야합니다. 재 컴파일하지 않고 구성을 변경할 수 있지만 원래 app.config가 아니라 컴파일 타임에 작성된 구성 파일을 편집해야합니다.

1 : web.config 파일은 이동되지 않지만 컴파일 및 배포시 동일한 위치에 유지됩니다. 이에 대한 한 가지 예외는 web.config가 변환 될 때 입니다.

.NET 코어

.NET Core에는 새로운 구성 옵션이 도입되었습니다. * .config 파일의 작동 방식은 변경되지 않았지만 개발자는 새롭고 유연한 구성 패러다임을 자유롭게 선택할 수 있습니다.


구성 파일 작동 방식에 대한 훌륭한 개요는 codeproject.com/Articles/16466/… 을 참조하십시오.
BKSpurgeon 11/11/15

56

간단히 말해 App.config응용 프로그램 수준 구성XML 을 보유 하는 기반 파일 형식입니다 .

예:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

ConfigurationManager아래 코드 스 니펫에 표시된대로 사용하여 구성에 액세스 할 수 있습니다 .

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

참고 : ConfigurationSettings 구성 정보를 검색하는 데 사용되지 않는 방법입니다.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];

21
System.Configuration.dll위에서 언급 한 API를 사용하려면 참조해야합니다 .
KFL

2
우선, 연결 문자열을 AppSettings 섹션에 저장해서는 안되며 ConnectionStrings 섹션에 연결됩니다. 두 가지 경우 Visual Studio는 디자이너를 통해 올바르게 설정 한 경우 설정에 대해 강력한 형식의 속성을 생성하므로 키 이름을 수동으로 입력 할 필요는 없습니다 (위의 코드에있는 것처럼).
BrainSlugs83

1
여기서는 베스트 프랙티스가 아니라 OP 문제에 대한 솔루션에 대해 이야기하고 있습니다.
Furqan Safdar

2
System.Configuration.ConfigurationManager.AppSettings["Key"]이미 호출 ToString()된 문자열 이므로 중복됩니다.
Bogdan Stăncescu

4

내가 아는 바로 어리 석고 명백한 것처럼 보일지라도 모든 대답에서 누락 된 것을 추가하기 만하면됩니다.

파일 이름은 "App.config"또는 "app.config"여야하며 Program.cs와 같은 수준에서 프로젝트에있을 수 있습니다.

다른 위치가 가능한지 모르겠지만 다른 이름 (예 : ODP.net 설명서에서 제안한대로 application.conf)이 작동하지 않았습니다.

추신. Visual Studio Code로 시작하여 "dotnet new"를 사용하여 새 프로젝트를 만들었습니다. 이 경우 구성 파일이 작성되지 않습니다. 다른 경우가 있습니다. PPS. 구성 파일을 읽을 수 있도록 너겟 패키지를 추가해야 할 수도 있습니다. .NET CORE의 경우 "dotnet add package System.Configuration.ConfigurationManager --version 4.5.0"입니다.


이것이 내가 찾던 것입니다. 포함 할 수준을 알아야했습니다. 일부 프로그램 / 프레임 워크는 다음과 같은 폴더를 찾습니다./resources
alex

3

App.Config는 응용 프로그램의 구성 파일로 사용되는 XML 파일입니다. 즉, 코드를 변경하거나 다시 컴파일하지 않고도 변경하려는 설정을 그 안에 저장합니다. 연결 문자열을 저장하는 데 자주 사용됩니다.

이를 수행하는 방법에 대한 이 MSDN 기사 를 참조하십시오 .


1

다음을 사용 하여 App.Config의 키에 액세스 할 수 있습니다 .

ConfigurationSettings.AppSettings["KeyName"]

이 스레드를 살펴보십시오


16
그것은 이제 쓸모없는 것으로 간주됩니다
mikus

0

포인트 하나만 더 추가하면됩니다

app.config를 사용하여 응용 프로그램 액세스를 제어하는 ​​방법을 사용하면 전체 응용 프로그램 사용 응용 프로그램 구성 파일에 특정 변경 사항을 적용하고 아래 ConfigurationSettings.AppSettings [ "Key"]와 같은 설정에 액세스 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.