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と同じフォルダーに存在する必要があります。そこにあることを確認してください。一般的なエラーはapp.configファイルを宛先ディレクトリにコピーすることですが、これは機能しません。
アダム

40
参照の追加が必要System.Configurationです。
チェックサム2014

13
私の.NET 4.5に System.ConfigurationはありませんConfigurationManager
qwert_ukg

3
私も4.5プロジェクトでnullを取得しています-これに2時間費やしました。バグである必要があります。
IrishChieftain

1
私もこれをマルチターゲットアプリケーションで見ています
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)をカバーする展開に関係する可能性があります
SomeoneElse

21

これを試してください:

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

4
それの実装は正しくないはずです。これは間違いなく、設定ファイルからキー値を取得するために機能します。
dtsg

プロジェクトの参照にSystem.Configurationへの参照を必ず追加してください!
GrahamJ

19

構成から読み取る:

Configへの参照を追加する必要があります

  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>ましたが、魅力的に機能しました!
ダブスタイリー

1
パーフェクト!私はこれを探していました:)ありがとう!
HSQL

@Masoud Siahkali、先週私は自分のプロジェクトでここにあるもののほとんどを試しましたが、実行時にユーザーによって変更されたときの値(今のところVS GUIから実行しただけ)はインスタンス間で保持されません。私の質問:stackoverflow.com/questions/61018443/…。ユーザーが変更したこれらの値の設定が保持されない理由はまだ
わかり

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 = ...値3 = ...ヌルを与え、値2 = ...作品

次に、内部の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 2018

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の新しいインスタンスを作成し、文字列をキャストする必要がないので、それを.ToString()オーバーライドで終了できます。
メイサム

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 環境キー+ "_Emails"の値になります

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

2

Webアプリケーションの場合、通常はこのメソッドを記述して、キーを使用して呼び出すだけです。

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>

値を取得するには

Properties.Settings.Default.Name

または

Properties.Settings.Default ["name"]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.