app.config 파일에서 읽기


131

코드를 사용하여 아래 app.config 파일에서 StartingMonthColumn 및 CategoryHeadingColumn을 읽으려고합니다.

ConfigurationSettings.AppSettings["StartingMonthColumn"]

그러나 null을 반환하고 ConfigurationSettings.AppSettings.Count도 0을 반환합니다.

내 Windows 응용 프로그램에서 이것을 읽도록 도와주세요.

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

프로젝트의 루트에서 구성 파일을 변경하는 동안 \ bin \ debug 폴더에서 앱을 실행하려고합니까? 그렇지 않으면 정리를 실행 한 후 구성을 변경하고 코드를 다시 빌드하십시오.
Kangkan

1
파일 이름이 "app.config"가 아닙니까? 프로젝트 이름은 확실하지만 응용 프로그램 출력 디렉토리에는 출력 바이너리 + ".config"(예 : "MyLibrary.dll.config"또는 "MyProgram.exe.config)와 같은 이름을 지정해야합니다. ", etc ...)
BrainSlugs83

@ BrianSlugs83 고마워 친구, 왜 내 앱이 충돌하는지 궁금했습니다. 이제 이틀 동안 모든 곳을 검색 한 후에는 여기에 답변이 있습니다. 방금 "app.config"가 있고 "MyProgram.exe.config"가 없습니다.
śmiglidigli

해결책 은 stackoverflow.com/questions/1189364/… 를 참조하십시오 . 감사합니다
Ariful Islam

답변:


171

구성 설정 .AppSettings가 있다 되지 않는 , 당신은 사용해야 구성 관리자 .AppSettings을 (당신에 대한 참조를 추가해야합니다 대신 System.Configuration를 )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

앱 설정을 읽는 데 여전히 문제가 있으면 app.config파일 이름이 올바른지 확인하십시오 . 특히, 실행중인 어셈블리에 따라 이름을 지정 MyApp.exe.config해야합니다. 즉와 동일한 디렉토리에 있어야합니다 MyApp.exe.


2
ConfigurationSettings.AppSettings [ "StartingMonthColumn"]이 null 또는 빈 문자열을 반환하면 Int32.Parse가 해당 값을 구문 분석하려고 할 때 예외가 발생하는 것으로 의심됩니다.
Bittercoder

@bittercoder, 그렇습니다. 그렇지만 app.config 파일은 항상 올바른 구성을 가져야합니다. OP가 거기에 TryParse 에 어떤 형태의 처리를 추가하고 싶다면 꼭 할 수 있습니다. 그러나 이것은 문제가되지 않았습니다.
James

2
또한 Settings.Default. * (이 경우 Settings.Default.StartingMonthColumn)를 통해 강력한 형식의 값 버전에 액세스 할 수 있습니다.
BrainSlugs83

@ BrainSlugs83 사용자 설정이 앱 설정과 혼동되고 있음에 유의하십시오 . 앱 설정에 대한 강력한 유형의 액세스를 원한다면 사용자 정의 ConfigurationSection
James

정확하지 않습니다. 값의 범위가 "사용자"또는 "응용 프로그램"인지에 관계없이 app.config에서 값을 가져옵니다 (GUI 디자이너에서 각 설정의 범위를 선택할 수 있음).
BrainSlugs83

20

나중에 참조 할 System.Configuration수 있도록 참조 라이브러리 에 추가하면 됩니다.

여기에 이미지 설명을 입력하십시오


2
당신의 대답은 첫 번째 대답보다 낫습니다. 모두가 당신이 참조를 추가해야한다는 것을 잊어 버렸습니다
essanousy

19

ConfigurationSettings.AppSettings는 더 이상 사용되지 않습니다 ( 여기 참조).

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

즉, 여전히 작동해야합니다.

제안 사항이지만 응용 프로그램 구성이 실행 파일에서 사용중인 구성인지 확인 했습니까?

디버거를 연결하고 다음 값을 확인하십시오.

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

그런 다음 구성 파일을 열고 섹션을 확인하십시오.


AppDomain.CurrentDomain.SetupInformation.ConfigurationFile에 대한 값을 얻으려고 할 때 안녕 Bittercoder 구성 파일이 아닌 C : \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config를 얻습니다 ... 무엇을해야합니까? 나는
Sathish

이것이 올바른 구성 파일입니다 ... 예상하지 못한 것일 수도 있습니다. 실제로이 경우 C : \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config가 전역 구성이라고 생각합니다. 어셈블리와 같은 디렉터리에 비슷한 이름의 Excel.EXE.config를 배치하면 다음과 같습니다. 앱 설정을 읽을 위치 자세한 내용은 다음 링크를 참조하십시오. dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

이:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

나를 위해 잘 작동합니다.

참고 ConfigurationManagerSystem.Configuration(당신이 원하는 가능성이 있습니다 있도록 네임 스페이스 using System.Configuration;문을), 그리고 당신이 읽을 것은 문자열 유형이 있기 때문에 당신이 숫자로 사용하기에 무엇을 읽고 분석해야한다는 점.

또한 system.configuration.dll프로젝트 또는 빌드 스크립트에서 참조로 설정해야합니다 .


무엇 ConfigurationManager.Appsettings를 얻기 위해 추가해야 참조 내가 사용하는 닷넷 2.0 프레임 워크
사티시

1
에 대한 참조가 필요합니다 System.Configuration.dll. ConfigurationManager확인을해야하므로 클래스는, .NET 2.0에서 추가되었다.
Michael Burr

7

이유는 간단합니다. 호출 ConfigurationSettings.AppSettings이 필요한 구성 파일을 반환하지 않습니다. 다음 방법 중 하나를 시도하십시오.

  • 응용 프로그램 구성의 이름이 응용 프로그램의 exe 파일과 동일한 이름인지 확인하십시오 (예 : MyApp.exe.config와 같이 확장명이 .config 임)
  • 또는 당신은 사용할 수 있습니다 ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

도움이 되었기를 바랍니다


3

프로젝트를 다시 빌드하십시오- App.config빌드 라이브러리에서 "<YourProjectName.exe> ​​.config" 의 내용을 복사합니다 .


2

또한 응용 프로그램을 실행하는 App.config (예 : 테스트 프로젝트의 App.config)에 "StartingMonthColumn"키를 추가하십시오.

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