web-dev-qa-db-ja.com

.netのapp.configまたはweb.configから設定を読み取る

私はweb.configまたはapp.configファイルから設定を読み取ることができる必要があるC#クラスライブラリに取り組んでいます(DLLがASP.NET Webアプリケーションから参照されるかWindowsフォームアプリケーションから参照されるかによって異なります)。 。

私はそれを見つけました

ConfigurationSettings.AppSettings.Get("MySetting")

動作しますが、そのコードはMicrosoftによって非推奨としてマークされています。

私は私が使うべきであることを読みました:

ConfigurationManager.AppSettings["MySetting"]

しかし、System.Configuration.ConfigurationManagerクラスはC#クラスライブラリプロジェクトからは利用できないようです。

誰もがこれを行うための最良の方法が何であるかを知っていますか?

709
Russ Clark

プロジェクトのreferencesフォルダ内のSystem.Configuration参照を追加をする必要があります。

あなたは間違いなく時代遅れのConfigurationManagerの上でConfigurationSettingsを使うべきです。

725
womp

以下のようなサンプルApp.configの場合:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

以下のコードを使用して上記のアプリ設定を読みます。

using System.Configuration;

プロジェクトにSystem.Configurationへの参照を追加しない場合もあります。そうすると次のように値にアクセスできます。

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

お役に立てれば!

776
Ram

フレームワーク4.5および4.6用に更新。以下は動作しなくなります。

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

今すぐプロパティを介してSettingクラスにアクセスします。

string keyvalue= Properties.Settings.Default.keyname;

詳細については、 アプリケーション設定の管理 を参照してください。

69
bsivel

クラスライブラリを右クリックして、メニューから[参照の追加]オプションを選択します。そして最後に.NETタブからSystem.Configurationを選択します。これはあなたのプロジェクトにSystem.Configuration dllを含めるでしょう。

36
Shiva

私はこれを使っています、そしてそれは私のためにうまくいきます

textBox1.Text = ConfigurationManager.AppSettings["Name"];
29
Pagey

プロジェクトにSystem.Configurationアセンブリへの参照を追加する必要があります。

21
Otávio Décio

設定から読み取る:

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

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

    文字列値= Properties.Settings.Default.keyname;

設定に保存:

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

App.configファイルをDLLに追加している可能性があります。すべてのdllが実行されているexeファイルの設定ファイルから設定を取得するため、App.Configは実行可能プロジェクトに対してのみ機能します。

ソリューションに2つのプロジェクトがあるとしましょう。

  • SomeDll
  • SomeExe

あなたの問題は、SomeExeではなくSomeDLLにapp.configを含めているという事実に関連しているかもしれません。 SomeDllはSomeExeプロジェクトから構成を読み取ることができます。

17
Victor Naranjo

これを試して:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

Web.configで次の構造にする必要があります。

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
9
Ruslan

私は同じ問題を抱えていた、ちょうどこのようにそれらを読む:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
8
Tom

web.configはWebアプリケーションで使用されます。web.configはデフォルトでWebアプリケーションに必要ないくつかの設定を持ちます。 Webアプリケーションの各フォルダにweb.configを付けることができます。

app.configはWindowsアプリケーションに使用されます。 vs.netでアプリケーションをビルドすると、自動的に<appname>.exe.configに名前が変更されます。このファイルはアプリケーションと一緒に配布する必要があります。

両方の設定ファイルから同じメソッドを使ってapp settings値を呼び出すことができます。

System.Configuration.ConfigurationSettings.AppSettings["Key"]
7
Wavare Santosh

また、 formo を使用することもできます。

構成:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

コード:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();
4
pomber

この呼び出し用のWrapperを作成することを強くお勧めします。 ConfigurationReaderServiceのようなもので、このクラスを取得するには依存性注入を使います。このようにして、テスト目的でこの構成ファイルを分離することができます。

そのため、推奨されるConfigurationManager.AppSettings["something"];を使用してこの値を返します。 .configファイルに使用可能なキーがない場合は、この方法で何らかのデフォルトの戻り値を作成できます。

4
Custodio

私は以下のようにSystem.Configurationの上にラッパークラスを作ることによって体系的な方法でアプリ設定変数にアクセスするための最良のアプローチを見つけました

public class BaseConfiguration
    {
        protected static object GetAppSetting(Type expectedType, string key)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            try
            {
                if (expectedType == typeof(int))
                    return int.Parse(value);
                if (expectedType == typeof(string))
                    return value;

                throw new Exception("Type not supported.");
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                    key, expectedType), ex);
            }
        }
    }

以下のように別のクラスを使ってハードコードされた名前で必要な設定変数にアクセスできるようになりました

public class ConfigurationSettings:BaseConfiguration
    {
        #region App setting

        public static string ApplicationName
        {
            get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
        }

        public static string MailBccAddress
        {
            get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
        }

        public static string DefaultConnection
        {
            get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
        }

        #endregion App setting

        #region global setting



        #endregion global setting
    }
4
Ashwini Jindal

完全を期すために、Webプロジェクトだけに利用できる別のオプションがあります。

System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

これの利点は、追加の参照を追加する必要がないため、一部の人にとっては望ましい場合があることです。

3
rdans

ステップ1:レファレンスを追加するためにレファレンスタブを右クリックしてください。

ステップ2:アセンブリタブをクリックしてください

ステップ3:「System.Configuration」を検索して下さい

ステップ4:[OK]をクリックします。

それはうまくいくでしょう

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
2
Jitendra Suthar

私は今、数日間、この同じ問題に対する修正を見つけようとしています。 web.configのappsettingsタグ内にキーを追加することでこれを解決できました。これは、ヘルパーを使用するときに.dllをオーバーライドするはずです。

<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
1
Jason

ConfigurationManagerは、独自の設定にアクセスするために必要なものではありません

これを行うには、使用する必要があります

{YourAppName}.Properties.Settings.{settingName}

1
martin c

Plsはあなたが働いている.netバージョンをチェックします。それは4より高くなければなりませんそしてあなたはあなたのアプリケーションにSystem.Configurationシステムライブラリを追加しなければなりません

1
nayanajith

別の可能な解決策:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
1
sherite

私はすべての設定値に対して型保証されたプロパティを宣言したIConfigインターフェイスを常に作成します。 Config実装クラスはSystem.Configurationへの呼び出しをラッパーします。すべてのSystem.Configuration呼び出しは、使用されているフィールドを保守および追跡し、それらのデフォルト値を宣言するために、はるかに簡単かつクリーンになりました。私は一般的なデータ型を読み、解析するためのプライベートヘルパーメソッドのセットを書きます。

IoCフレームワークを使用すると、インターフェースをクラスコンストラクターに渡すだけで、アプリ内の任意の場所にあるIConfigフィールドにアクセスできます。また、単体テストでIConfigインターフェイスのモック実装を作成できるので、App.configファイルまたはWeb.configファイルに触れる必要なく、さまざまな構成値と値の組み合わせをテストできます。

1
Tony O'Hagan

私は、.netcoreプロジェクトで働く以下のアプローチを取ることができました:

手順:

i)プロジェクトにappsettings.json(以下に示す形式)を作成しますii)次に、以下に示す形式の構成クラスを作成します。 iii)構成クラスの使用法を示すLogin()メソッドを作成しました。

Create appsettings.json in your project with content :
`
{
  "Environments": {
    "QA": {
      "Url": "somevalue",
 "Username": "someuser",
      "Password": "somepwd"
  },
  "BrowserConfig": {
    "Browser": "Chrome",
    "Headless": "true"
  },
  "EnvironmentSelected": {
    "Environment": "QA" 
  }
}
`


`
 public static class Configuration
    {
        private static IConfiguration _configuration;

        static Configuration()
        {
            var builder = new ConfigurationBuilder()
                .AddJsonFile($"appsettings.json");

            _configuration = builder.Build();

        }
        public static Browser GetBrowser()
        {

            if (_configuration.GetSection("BrowserConfig:Browser").Value == "Firefox")
            {
                return Browser.Firefox;
            }
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "Edge")
            {
                return Browser.Edge;
            }
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "IE")
            {
                return Browser.InternetExplorer;
            }
            return Browser.Chrome;
        }

        public static bool IsHeadless()
        {
            return _configuration.GetSection("BrowserConfig:Headless").Value == "true";
        }

        public static string GetEnvironment()
        {
            return _configuration.GetSection("EnvironmentSelected")["Environment"];
        }
        public static IConfigurationSection EnvironmentInfo()
        {
            var env = GetEnvironment();
            return _configuration.GetSection($@"Environments:{env}");
        }

    }
`


`
 public void Login()
        {
            var environment = Configuration.EnvironmentInfo();
            Email.SendKeys(environment["username"]);
            Password.SendKeys(environment["password"]);
            WaitForElementToBeClickableAndClick(_driver, SignIn);
        }
`
0
user3534040

私の場合はうまくいきました。

System.Configuration.ConfigurationSettings.AppSettings["yourKeyName"]

上記のコード行も古いバージョンであり、新しいライブラリでは推奨されないことに注意する必要があります。

0
Mohammad D