web-dev-qa-db-ja.com

AppSettingsは.configファイルから値を取得します

設定ファイルの値にアクセスできません。

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>

あなたは私がすべきことについて何か提案がありますか?

148
Matt

これは私のために働く:

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

Dtsgが答えた答えは:

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

ただし、 アセンブリ参照 を追加する必要があります。

システム構成

ソリューションエクスプローラー および Referencesで右クリック を選択し、 Add reference を選択します。 アセンブリ タブを選択し、 Configuration を検索します。

Reference manager

これがmy 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"];
52
rotgers

これを試してみてください。

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

設定から読み取る:

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

  1. プロジェクトの[プロパティ]を開きます。
  2. [設定]タブに移動します
  3. 「名前」と「値」を追加
  4. 次のコードを使用して値を取得します。
string value = Properties.Settings.Default.keyname;

設定に保存:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();
14
Masoud Siahkali

使ってます:

    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を使用する

6
Kkloe

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では動作しません。よろしく:ラファエル

久しぶりにこちらに戻る….

まだこの試みに対する答えを探している人のために、ConfigurationManagerの終焉を考えれば(例えば):

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

もちろんSystem.Configurationが必要です。

(実際に動作し、読みやすくなるようにコードを編集しました)

2
Mike Dean

Webアプリケーションの場合、私は通常このメソッドを書いてキーでそれを呼び出すだけです。

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

_ imo _ これが私の考えです 2016年頃

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

System.Configurationが参照されていることを確認してください。

質問は value appsettings//を求めている キー

最も確実にそうあるべきです(SHOULD)

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

これは、値をまとめることができるねじれです(この質問ではありません)。

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

emailsはEnvironment Key + "_Emails"の値になります。

example :   [email protected];[email protected];
2
Tom Stickel

明らかなことだと思ったことをしたのだ。

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

それはコンパイルしますが、常にnullを返します。

しかしこれは(上から)うまくいきます:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];
1
Steve
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];
1
musicinmusic
  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

OR

Properties.Settings.Default ["name"]

0
Hakan

単純に入力することができます:

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

keyはオブジェクトで、AppSettingsは文字列をとるため

0
Soprano

私のデスクトップアプリケーションに追加した設定ファイルに "App1.config"という名前が付けられていることに気付くまで、私の簡単なテストも失敗しました。私はそれを "App.config"に改名しました。

0
BCA