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.