903

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

私はそれを見つけました

ConfigurationSettings.AppSettings.Get("MySetting")

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

私は使用する必要があることを読みました:

ConfigurationManager.AppSettings["MySetting"]

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

これを行う最善の方法は何ですか?

4

26 に答える 26

966

以下のようなサンプル 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"];
于 2012-10-15T08:47:41.297 に答える
863

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

ConfigurationManagerobsolete よりも を使用する必要がありますConfigurationSettings

于 2009-07-27T17:00:39.897 に答える
99

.NET Framework 4.5 および 4.6 の更新。以下は機能しなくなります。

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

次に、Properties を介して Setting クラスにアクセスします。

string keyvalue = Properties.Settings.Default.keyname;

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

于 2015-08-21T18:24:09.123 に答える
39

クラス ライブラリを右クリックし、メニューから [参照の追加] オプションを選択します。

そして、.NET タブから System.Configuration を選択します。これにより、System.Configuration DLL ファイルがプロジェクトに含まれます。

于 2009-07-27T17:51:10.373 に答える
30

私はこれを使用していますが、私にとってはうまく機能します:

textBox1.Text = ConfigurationManager.AppSettings["Name"];
于 2011-11-30T23:15:08.763 に答える
21

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

于 2009-07-27T17:01:55.027 に答える
20

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

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

  • いくつかのDll
  • いくつかのエグゼ

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

于 2013-06-12T18:59:47.127 に答える
8

私も同じ問題を抱えていました。このように読んでください: System.Configuration.ConfigurationSettings.AppSettings["MySetting"]

于 2013-10-16T10:53:52.420 に答える
7

web.configWeb アプリケーションで使用されます。web.configデフォルトでは、Web アプリケーションに必要ないくつかの構成があります。web.configWeb アプリケーションの下に for each フォルダーを作成できます。

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

同じメソッドを使用して、両方の構成ファイルから値を呼び出すことができapp settingsます: System.Configuration.ConfigurationSettings.AppSettings["Key"]

于 2011-12-16T07:33:47.043 に答える
7

以下のように 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
}
于 2016-10-14T06:33:11.333 に答える
4

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

したがって、ConfigurationManager.AppSettings["something"];提案を使用してこの値を返します。このメソッドを使用すると、.configファイルに使用可能なキーがない場合に、ある種のデフォルトのリターンを作成できます。

于 2012-10-18T19:19:11.067 に答える
4

また、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>();
于 2015-05-18T20:58:46.373 に答える
4

ConfigurationManagerクラスを使用する必要がある/使用したい場合...

NuGet Package ManagerSystem.Configuration.ConfigurationManagerを介して Microsoftがロードする必要がある場合があります

ツール-> NuGet パッケージ マネージャー->ソリューションの NuGet パッケージの管理...

Microsoft Docs

ドキュメントから注目に値する1つのこと...

アプリケーションが独自の構成への読み取り専用アクセスを必要とする場合は、GetSection(String) メソッドを使用することをお勧めします。このメソッドは、現在のアプリケーションのキャッシュされた構成値へのアクセスを提供します。これは、Configuration クラスよりもパフォーマンスが優れています。

于 2020-03-06T00:22:34.640 に答える
3

完全を期すために、Web プロジェクトでのみ使用できる別のオプションがあります: System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

これの利点は、余分な参照を追加する必要がないことです。そのため、一部の人にとっては好ましいかもしれません。

于 2016-03-16T11:59:27.210 に答える
2

以下のアプローチを .NET Core プロジェクトで機能させることができました。

手順:

  1. プロジェクトに appsettings.json (下記の形式) を作成します。
  2. 次に構成クラスを作成します。以下にフォーマットを示します。
  3. 構成クラスの使用法を示す Login() メソッドを作成しました。

    プロジェクトに appsettings.json をコンテンツとともに作成します。

    {
      "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);
    }
    
于 2019-07-26T02:31:28.460 に答える
1

別の可能な解決策:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
于 2016-03-30T14:34:46.867 に答える
1

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

<configuration>
    <appSettings>
        <add key="loginUrl" value="~/RedirectValue.cshtml" />
        <add key="autoFormsAuthentication" value="false"/>
    </appSettings>
</configuration>
于 2013-04-30T18:06:46.233 に答える
-8

次に例を示します。App.config

<applicationSettings>
    <MyApp.My.MySettings>
        <setting name="Printer" serializeAs="String">
            <value>1234 </value>
        </setting>
    </MyApp.My.MySettings>
</applicationSettings>

Dim strPrinterName as string = My.settings.Printer
于 2017-01-09T22:57:35.093 に答える