AppSettings는 .config 파일에서 가치를 얻습니다.


172

구성 파일의 값에 액세스 할 수 없습니다.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException

.config 파일 :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- ... -->
    <add key="ClientsFilePath" value="filepath"/>
    <!-- ... -->
  </appSettings>
</configuration>

어떻게해야하는지 제안이 있습니까?

답변:


345

이것은 나를 위해 작동합니다 :

string value = System.Configuration.ConfigurationManager.AppSettings[key];

6
제공 한 코드에는 YourProgram.exe.config와 동일한 폴더에 YourProgram.exe.config 파일이 있어야합니다. 그냥 거기 있는지 확인하십시오. 일반적인 오류는 app.config 파일을 대상 디렉토리로 복사하면 작동하지 않습니다.
— Adam

40
참조 추가가 필요합니다 System.Configuration.
— 체크섬

13
내 .NET 4.5 System.Configuration 에는ConfigurationManager
— qwert_ukg

3
4.5 프로젝트에서도 null을 얻었습니다. 이것에 2 시간을 소비했습니다. 버그 여야합니다.
— IrishChieftain

1
나는 또한 다중 대상 응용 프로그램에서 이것을보고 있습니다. 내 .net 핵심 구성은 작동하지만 .net 프레임 워크 구성은 (ConfigurationManager 사용)
— Michael Brown

61

dtsg가 해낸 대답은 다음과 같습니다.

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

그러나 어셈블리 참조 를 추가해야 합니다.

시스템 설정

당신의 이동 솔루션 탐색기 와 마우스 오른쪽 버튼으로 클릭 참고 문헌에 선택 추가 참조 . 어셈블리 탭을 선택하고 구성을 검색하십시오 .

레퍼런스 매니저

다음은 내 App.config 의 예입니다 .

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdminName" value="My Name"/>
    <add key="AdminEMail" value="MyEMailAddress"/>
  </appSettings>
</configuration>

다음과 같은 방법으로 얻을 수 있습니다.

string adminName = ConfigurationManager.AppSettings["AdminName"];

2
OP와 동일한 문제가있는 것 같습니다. VS2015 사용. 방법이나 이유를 모르지만 System.Configuration에 대한 내 언급은 System.configuration 소문자입니다.
— Tim

이것은 더 "어셈블리"탭 (적어도 VS2019)이없는 경우 커버에 explanding와 함께 할 수있는
— SomeoneElse

21

이것을 줘 :

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

4
구현이 올바르지 않아야합니다. 이것은 구성 파일에서 키 값을 검색하는 데 확실히 작동합니다.
— dtsg

프로젝트 참조에 System.Configuration에 대한 참조를 추가하십시오!
— GrahamJ

19

구성에서 읽기 :

구성에 대한 참조를 추가해야합니다

  1. 프로젝트에서 "속성"을여십시오
  2. "설정"탭으로 이동
  3. "이름"과 "값"추가
  4. 다음 코드를 사용하여 가치를 얻으십시오.
string value = Properties.Settings.Default.keyname;

구성에 저장 :

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

4
설명한대로 프로젝트 속성의 설정 탭에서 값을 추가하면 ConfigurationManager를 사용하는 다른 모든 답변이 작동하지 않으므로 매우 유용합니다. 감사.
— 멍청한 무

2
이것은 나를 위해 일했다. null위의 권장 사항 으로 문자열을 얻었지만 Properties.Settings.Default.<keyName>매력처럼 작동했습니다!
— dub stylee

1
완벽 해! 나는 이것을 찾고 있었다 :) 감사합니다!
— HSQL

@Masoud Siahkali, 지난 주 나는 내 자신의 프로젝트에서 여기에있는 것을 거의 시도했지만 런타임에 사용자가 변경했을 때 (현재 VS GUI에서 실행하면) 값이 인스턴스간에 지속되지 않습니다. 내 질문 : stackoverflow.com/questions/61018443/… . 이러한 값의 사용자 변경 설정이 지속되지 않는 이유를 여전히 파악하지 못했습니다.
— Marky

8

나는 사용하고있다 :

    ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"];
    value2 = config.AppSettings.Settings["NewKey0"].Value;
    value3 = ConfigurationManager.AppSettings["NewKey0"];

여기서 value1 = ... 및 value3 = ... 은 null을 제공하고 value2 = ... 는 작동합니다.

그런 다음 내부 app.config를 다음과 같이 대체하기로 결정했습니다.

// Note works in service but not in wpf
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension");
ConfigurationManager.RefreshSection("appSettings");

string value = ConfigurationManager.AppSettings["NewKey0"];

VS2012 .net 4 사용


이것은 내가 필요한 것입니다. 정말 도움이되었습니다. 감사합니다.
— Umut OVECOGLU

5

에서 app/web.config파일을 다음과 같은 구성을 설정합니다 :

<configuration>
  <appSettings>
    <add key="NameForTheKey" value="ValueForThisKey" />
    ... 
    ...    
  </appSettings>
...
...
</configuration>

다음 줄을 입력하여 코드에서 이것에 액세스 할 수 있습니다.

string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"];

* 참고이 잘 동작 .net4.5.x하고 .net4.6.x, 그러나 작동하지 않습니다 .net core. 안부 : 라파엘


3

오랜만에 이걸로 돌아온다면 ...

ConfigurationManager가 종료되면 여전히이 시도에 대한 해답을 찾는 사람은 다음과 같습니다.

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

물론 System.Configuration이 필요합니다.

(실제로 작동하고 읽기 쉬운 코드를 편집했습니다)


좋은 대답이지만 정리하십시오. AppSettingsReader를 다시 다시 작성할 때 AppSettingsReader의 새 인스턴스를 작성하는 이유는 무엇입니까?
— maytham-ɯɐɥʇʎɐɯ

2

내가 생각했던 것을 분명히했던 것을 보아라.

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();

컴파일하는 동안 항상 null을 반환합니다.

그러나 (위에서) 작동합니다.

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

2

답변 중 일부는 IMO 에서 약간 벗어난 것 같습니다. 2016 년경 내 테이크입니다.

<add key="ClientsFilePath" value="filepath"/>

메이크업은 반드시 System.Configuration참조됩니다.

appsettings 키의 가치 를 묻는 질문

가장 확실한 것은

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

다음은 값을 그룹화 할 수있는 방법입니다 (이 질문은 아님).

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"];

emails 환경 키 + "_ 이메일"의 가치

example :   jack@google.com;thad@google.com;

2

웹 응용 프로그램의 경우 일반적 으로이 방법을 작성하고 키로 호출합니다.

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }

1

간단히 입력하면됩니다 :

string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];

왜냐하면 key객체이고 AppSettings문자열을 취하기 때문 입니다


1
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

1

아니면 사용할 수 있습니다

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

0

데스크톱 응용 프로그램에 추가 한 구성 파일에 "App1.config"라는 이름이 지정 될 때까지 다른 답변의 조언에 따라 간단한 테스트도 실패했습니다. 이름을 "App.config"로 바꾸고 모든 것이 즉시 작동했습니다.


0
  1. 프로젝트에서 "속성"을여십시오
  2. "설정"탭으로 이동
  3. "이름"과 "값"추가

코드가 자동으로 생성됩니다

    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... >
          <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <XX....Properties.Settings>
          <setting name="name" serializeAs="String">
            <value>value</value>
          </setting>
          <setting name="name2" serializeAs="String">
            <value>value2</value>
          </setting>
       </XX....Properties.Settings>
      </applicationSettings>
    </configuration>

가치를 얻으려면

속성. 설정. 기본 이름

또는

속성. 설정. 기본 [ "이름"]

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