坂本  健一

坂本 健一

1633798800

C#で構成設定を読み取る4つの方法

この記事では、C#でWeb.ConfigまたはApp.Configから構成設定を取得/読み取る方法を示します。構成ファイル内で値を設定し、定義されたキーに基づいてそれらの値を読み取るには、さまざまな方法があります。これらの値は構成セクション内で定義します。これは、より安全にするために必要になる場合があります。頻繁に受信する必要がある秘密鍵または値の場合があります。

今日は、構成セクションから値を取得する4つの異なる方法を紹介します。

このデモンストレーションでは、単純なコンソールアプリケーションを作成し、「ConfigurationExample」という名前を付けます。以下に示すように、コンソールアプリケーションを1つ作成するだけです。

新しいプロジェクト> Visual C#>コンソールアプリケーション
 

C#で構成設定を読み取る4つの方法

ConfigurationManagerを使用して、構成設定にアクセスするには、System.Configurationアセンブリ参照を追加する必要があります。参照を追加するには、[参照]を右クリックし、クリックして参照を追加します。

C#で構成設定を読み取る4つの方法

これで、System.Configuration参照がプロジェクトに正常に追加されたことがわかります。

C#で構成設定を読み取る4つの方法

したがって、構成ファイル内に値を追加するさまざまな方法と、それを取得するために従うアプローチに移りましょう。

最初のアプローチ 

1つの例を見てみましょう。ここでは、いくつかのアプリケーションレベルの設定を追加し、それらのキーに基づいてそれらにアクセスする必要があります。これらの設定はWeb.ConfigまたはApp.Config内で追加できますが、構成セクション内に<appSettings>セクションを追加する必要があります。

appSettingsセクション内にある以下の例に従ってください。いくつかのキーとその値を定義しました。

App.config 

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  </startup>  
  <appSettings>  
    <add key="Title" value="Configuration Example"/>  
    <add key="Language" value="CSharp"/>  
  </appSettings>  
</configuration>  

これらの値にアクセスするために、ConfigurationManagerという名前の静的クラスが1つあり、AppSettingsという名前のgetterプロパティが1つあります。以下に示すように、AppSettings内でキーを渡すだけで、AppSettingsセクションから目的の値を取得できます。 

public static void GetConfigurationValue()  
        {  
            var title = ConfigurationManager.AppSettings["title"];  
            var language = ConfigurationManager.AppSettings["language"];  
  
            Console.WriteLine(string.Format("'{0}' project is created in '{1}' language ", title, language));  
        }   

上記のコードを実装すると、次のような出力が得られます。

C#で構成設定を読み取る4つの方法

2番目のアプローチ 

次の例に移りましょう。分離のためにセクション内に設定を追加する必要がある場合、この状況では、以下に示すように、App.Config /Web.Configの構成セクション内にカスタムセクションを作成できます。このセクションでは、セクション名に基づいてデータを読みやすく、理解しやすくすることができます。

以下の例では、ApplicationSettingsという名前のカスタムセクションを1つ作成し、すべてのキーと値のペアを個別に追加しました。 

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
   <configSections>  
    <section name="ApplicationSettings" type="System.Configuration.NameValueSectionHandler"/>      
  </configSections>  
    
  <ApplicationSettings>  
    <add key="ApplicationName" value="Configuration Example Project"/>  
    <add key="Language" value="CSharp"/>  
    <add key="SecretKey" value="012345"/>  
  </ApplicationSettings>  
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  </startup>    
</configuration> 

カスタムセクション設定にアクセスするには、まず、ConfigurationManagerクラス内で定義されているGetSectionメソッドを使用してセクションを見つけ、戻り値をNameValueCollectionとしてキャストする必要があります。このカスタムセクション内で使用可能なすべてのキーが返され、キーに基づいて、以下に示すように値を簡単に取得できます。 

//Approach Two  
        public static void GetConfigurationUsingSection()  
        {  
            var applicationSettings = ConfigurationManager.GetSection("ApplicationSettings") as NameValueCollection;  
            if (applicationSettings.Count == 0)  
            {  
                Console.WriteLine("Application Settings are not defined");  
            }  
            else  
            {  
                foreach (var key in applicationSettings.AllKeys)  
                {  
                    Console.WriteLine(key + " = " + applicationSettings[key]);  
                }  
            }  
        }   

上記のコードを実装すると、以下の出力が得られます。

C#で構成設定を読み取る4つの方法

3番目のアプローチ 

それでは、いくつかの難しいものに移りましょう。ここでは、グループ内にセクションを作成して、必要に応じて同じグループに複数のセクションを追加できるようにします。基本的に、同じタイプのセクションをグループにグループ化します。

以下の例では、BlogGroupという名前の1つのグループを作成し、その中に「PostSetting」という名前の1つのセクションを定義し、そのタイプをNameValueSectionHandlerとして定義しました。「PostSetting」セクションには、以下に示すように、すべてのキーと値のペアが個別に含まれています。 

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <configSections>     
    <sectionGroup name="BlogGroup">  
      <section name="PostSetting" type="System.Configuration.NameValueSectionHandler"/>  
    </sectionGroup>  
    <section name="ProductSettings" type="ConfigurationExample.ProductSettings, ConfigurationExample"/>  
  </configSections>  
  
  <BlogGroup>  
    <PostSetting>  
      <add key="PostName" value="Getting Started With Config Section in .Net"/>  
      <add key="Category" value="C#"></add>  
      <add key="Author" value="Mukesh Kumar"></add>  
      <add key="PostedDate" value="28 Feb 2017"></add>  
    </PostSetting>  
  </BlogGroup>  
    
  <ProductSettings>  
    <DellSettings ProductNumber="20001" ProductName="Dell Inspiron" Color="Black" Warranty="2 Years" ></DellSettings>  
  </ProductSettings>  
    
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>  
  </startup>  
</configuration>   

これらのタイプの構成設定を読み取るには、セクションにアクセスする必要があります。セクショングループに基づいて、以下に示すように、すべてのキーとその値を取得できます。

//Approach Three  
        public static void GetConfigurationUsingSectionGroup()  
        {  
            var PostSetting = ConfigurationManager.GetSection("BlogGroup/PostSetting") as NameValueCollection;  
            if (PostSetting.Count == 0)  
            {  
                Console.WriteLine("Post Settings are not defined");  
            }  
            else  
            {  
                foreach (var key in PostSetting.AllKeys)  
                {  
                    Console.WriteLine(key + " = " + PostSetting[key]);  
                }  
            }  
        }   

上記のコードを実装すると、次のような出力が得られます。

C#で構成設定を読み取る4つの方法

4番目のアプローチ 

ついに、構成設定の高度な段階になりました。場合によっては、カスタムクラスの動作に基づいてすべてのキーと値のペアを設定し、外部から動作を制御できるようにする必要があります。

次のクラス「DellFeatures」を参照してください。これは、Dellラップトップのいくつかのカスタムプロパティを示しており、構成セクション内に追加する必要があります。次のクラスには、構成セクションで値が使用できない場合のデフォルト値がいくつか含まれています。

using System;  
using System.Collections.Generic;  
using System.Configuration;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace ConfigurationExample  
{  
    public class DellFeatures : ConfigurationElement  
    {  
        [ConfigurationProperty("ProductNumber", DefaultValue = 00000, IsRequired = true)]  
        public int ProductNumber  
        {  
            get  
            {  
                return (int)this["ProductNumber"];  
            }  
            set  
            {  
                value = (int)this["ProductNumber"];  
            }  
        }  
  
        [ConfigurationProperty("ProductName", DefaultValue = "DELL", IsRequired = true)]  
        public string ProductName  
        {  
            get  
            {  
                return (string)this["ProductName"];  
            }  
            set  
            {  
                value = (string)this["ProductName"];  
            }  
        }  
  
        [ConfigurationProperty("Color", IsRequired = false)]  
        public string Color  
        {  
            get  
            {  
                return (string)this["Color"];  
            }  
            set  
            {  
                value = (string)this["Color"];  
            }  
        }  
        [ConfigurationProperty("Warranty", DefaultValue = "1 Years", IsRequired = false)]  
        public string Warranty  
        {  
            get  
            {  
                return (string)this["Warranty"];  
            }  
            set  
            {  
                value = (string)this["Warranty"];  
            }  
        }  
    }  
}  

この設定を返すために、これをプロパティとして返すクラスをもう1つ作成します。ここでは、プロパティとして複数のクラスを追加することもできます。

using System;  
using System.Collections.Generic;  
using System.Configuration;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace ConfigurationExample  
{  
    public class ProductSettings : ConfigurationSection  
    {  
        [ConfigurationProperty("DellSettings")]  
        public DellFeatures DellFeatures  
        {  
            get  
            {  
                return (DellFeatures)this["DellSettings"];  
            }  
            set  
            {  
                value = (DellFeatures)this["DellSettings"];  
            }  
        }  
    }  
}  

構成セクション内に実装するために、「ProductSettings」のタイプを「ConfigurationExample.ProductSettings」に変更します。これにより、DellFeaturesクラスのすべてのプロパティが返されます。

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <configSections>     
      
    <section name="ProductSettings" type="ConfigurationExample.ProductSettings, ConfigurationExample"/>  
  </configSections>  
  
  <BlogGroup>  
    <PostSetting>  
      <add key="PostName" value="Getting Started With Config Section in .Net"/>  
      <add key="Category" value="C#"></add>  
      <add key="Author" value="Mukesh Kumar"></add>  
      <add key="PostedDate" value="28 Feb 2017"></add>  
    </PostSetting>  
  </BlogGroup>  
    
  <ProductSettings>  
    <DellSettings ProductNumber="20001" ProductName="Dell Inspiron" Color="Black" Warranty="2 Years" ></DellSettings>  
  </ProductSettings>  
    
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>  
  </startup>  
</configuration>  

このタイプの構成にアクセスするには、最初にカスタムセクションを取得する必要があります。以下に示すように、残りのセクションには非常に簡単にアクセスできます。

//Approach Four  
        public static void GetConfigurationUsingCustomClass()  
        {  
            var productSettings = ConfigurationManager.GetSection("ProductSettings") as ConfigurationExample.ProductSettings;  
            if (productSettings == null)  
            {  
                Console.WriteLine("Product Settings are not defined");  
            }  
            else  
            {  
                var productNumber = productSettings.DellFeatures.ProductNumber;  
                var productName = productSettings.DellFeatures.ProductName;  
                var color = productSettings.DellFeatures.Color;  
                var warranty = productSettings.DellFeatures.Warranty;  
  
                Console.WriteLine("Product Number = " + productNumber);  
                Console.WriteLine("Product Name = " + productName);  
                Console.WriteLine("Product Color = " + color);  
                Console.WriteLine("Product Warranty = " + warranty);  
            }  
        }  

上記のコードを実装すると、次のような出力が得られます。

構成ファイル内で構成設定を定義し、それにアクセス/読み取るさまざまな方法を見てきました。

この投稿がお役に立てば幸いです。次の投稿を改善するのに役立つフィードバックをお寄せください。疑問がある場合は、コメントセクションで質問してください。

#csharp 

リンク: https://www.c-sharpcorner.com/article/four-ways-to-read-configuration-setting-in-c-sharp/

What is GEEK

Buddha Community

C#で構成設定を読み取る4つの方法
坂本  健一

坂本 健一

1633798800

C#で構成設定を読み取る4つの方法

この記事では、C#でWeb.ConfigまたはApp.Configから構成設定を取得/読み取る方法を示します。構成ファイル内で値を設定し、定義されたキーに基づいてそれらの値を読み取るには、さまざまな方法があります。これらの値は構成セクション内で定義します。これは、より安全にするために必要になる場合があります。頻繁に受信する必要がある秘密鍵または値の場合があります。

今日は、構成セクションから値を取得する4つの異なる方法を紹介します。

このデモンストレーションでは、単純なコンソールアプリケーションを作成し、「ConfigurationExample」という名前を付けます。以下に示すように、コンソールアプリケーションを1つ作成するだけです。

新しいプロジェクト> Visual C#>コンソールアプリケーション
 

C#で構成設定を読み取る4つの方法

ConfigurationManagerを使用して、構成設定にアクセスするには、System.Configurationアセンブリ参照を追加する必要があります。参照を追加するには、[参照]を右クリックし、クリックして参照を追加します。

C#で構成設定を読み取る4つの方法

これで、System.Configuration参照がプロジェクトに正常に追加されたことがわかります。

C#で構成設定を読み取る4つの方法

したがって、構成ファイル内に値を追加するさまざまな方法と、それを取得するために従うアプローチに移りましょう。

最初のアプローチ 

1つの例を見てみましょう。ここでは、いくつかのアプリケーションレベルの設定を追加し、それらのキーに基づいてそれらにアクセスする必要があります。これらの設定はWeb.ConfigまたはApp.Config内で追加できますが、構成セクション内に<appSettings>セクションを追加する必要があります。

appSettingsセクション内にある以下の例に従ってください。いくつかのキーとその値を定義しました。

App.config 

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  </startup>  
  <appSettings>  
    <add key="Title" value="Configuration Example"/>  
    <add key="Language" value="CSharp"/>  
  </appSettings>  
</configuration>  

これらの値にアクセスするために、ConfigurationManagerという名前の静的クラスが1つあり、AppSettingsという名前のgetterプロパティが1つあります。以下に示すように、AppSettings内でキーを渡すだけで、AppSettingsセクションから目的の値を取得できます。 

public static void GetConfigurationValue()  
        {  
            var title = ConfigurationManager.AppSettings["title"];  
            var language = ConfigurationManager.AppSettings["language"];  
  
            Console.WriteLine(string.Format("'{0}' project is created in '{1}' language ", title, language));  
        }   

上記のコードを実装すると、次のような出力が得られます。

C#で構成設定を読み取る4つの方法

2番目のアプローチ 

次の例に移りましょう。分離のためにセクション内に設定を追加する必要がある場合、この状況では、以下に示すように、App.Config /Web.Configの構成セクション内にカスタムセクションを作成できます。このセクションでは、セクション名に基づいてデータを読みやすく、理解しやすくすることができます。

以下の例では、ApplicationSettingsという名前のカスタムセクションを1つ作成し、すべてのキーと値のペアを個別に追加しました。 

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
   <configSections>  
    <section name="ApplicationSettings" type="System.Configuration.NameValueSectionHandler"/>      
  </configSections>  
    
  <ApplicationSettings>  
    <add key="ApplicationName" value="Configuration Example Project"/>  
    <add key="Language" value="CSharp"/>  
    <add key="SecretKey" value="012345"/>  
  </ApplicationSettings>  
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />  
  </startup>    
</configuration> 

カスタムセクション設定にアクセスするには、まず、ConfigurationManagerクラス内で定義されているGetSectionメソッドを使用してセクションを見つけ、戻り値をNameValueCollectionとしてキャストする必要があります。このカスタムセクション内で使用可能なすべてのキーが返され、キーに基づいて、以下に示すように値を簡単に取得できます。 

//Approach Two  
        public static void GetConfigurationUsingSection()  
        {  
            var applicationSettings = ConfigurationManager.GetSection("ApplicationSettings") as NameValueCollection;  
            if (applicationSettings.Count == 0)  
            {  
                Console.WriteLine("Application Settings are not defined");  
            }  
            else  
            {  
                foreach (var key in applicationSettings.AllKeys)  
                {  
                    Console.WriteLine(key + " = " + applicationSettings[key]);  
                }  
            }  
        }   

上記のコードを実装すると、以下の出力が得られます。

C#で構成設定を読み取る4つの方法

3番目のアプローチ 

それでは、いくつかの難しいものに移りましょう。ここでは、グループ内にセクションを作成して、必要に応じて同じグループに複数のセクションを追加できるようにします。基本的に、同じタイプのセクションをグループにグループ化します。

以下の例では、BlogGroupという名前の1つのグループを作成し、その中に「PostSetting」という名前の1つのセクションを定義し、そのタイプをNameValueSectionHandlerとして定義しました。「PostSetting」セクションには、以下に示すように、すべてのキーと値のペアが個別に含まれています。 

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <configSections>     
    <sectionGroup name="BlogGroup">  
      <section name="PostSetting" type="System.Configuration.NameValueSectionHandler"/>  
    </sectionGroup>  
    <section name="ProductSettings" type="ConfigurationExample.ProductSettings, ConfigurationExample"/>  
  </configSections>  
  
  <BlogGroup>  
    <PostSetting>  
      <add key="PostName" value="Getting Started With Config Section in .Net"/>  
      <add key="Category" value="C#"></add>  
      <add key="Author" value="Mukesh Kumar"></add>  
      <add key="PostedDate" value="28 Feb 2017"></add>  
    </PostSetting>  
  </BlogGroup>  
    
  <ProductSettings>  
    <DellSettings ProductNumber="20001" ProductName="Dell Inspiron" Color="Black" Warranty="2 Years" ></DellSettings>  
  </ProductSettings>  
    
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>  
  </startup>  
</configuration>   

これらのタイプの構成設定を読み取るには、セクションにアクセスする必要があります。セクショングループに基づいて、以下に示すように、すべてのキーとその値を取得できます。

//Approach Three  
        public static void GetConfigurationUsingSectionGroup()  
        {  
            var PostSetting = ConfigurationManager.GetSection("BlogGroup/PostSetting") as NameValueCollection;  
            if (PostSetting.Count == 0)  
            {  
                Console.WriteLine("Post Settings are not defined");  
            }  
            else  
            {  
                foreach (var key in PostSetting.AllKeys)  
                {  
                    Console.WriteLine(key + " = " + PostSetting[key]);  
                }  
            }  
        }   

上記のコードを実装すると、次のような出力が得られます。

C#で構成設定を読み取る4つの方法

4番目のアプローチ 

ついに、構成設定の高度な段階になりました。場合によっては、カスタムクラスの動作に基づいてすべてのキーと値のペアを設定し、外部から動作を制御できるようにする必要があります。

次のクラス「DellFeatures」を参照してください。これは、Dellラップトップのいくつかのカスタムプロパティを示しており、構成セクション内に追加する必要があります。次のクラスには、構成セクションで値が使用できない場合のデフォルト値がいくつか含まれています。

using System;  
using System.Collections.Generic;  
using System.Configuration;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace ConfigurationExample  
{  
    public class DellFeatures : ConfigurationElement  
    {  
        [ConfigurationProperty("ProductNumber", DefaultValue = 00000, IsRequired = true)]  
        public int ProductNumber  
        {  
            get  
            {  
                return (int)this["ProductNumber"];  
            }  
            set  
            {  
                value = (int)this["ProductNumber"];  
            }  
        }  
  
        [ConfigurationProperty("ProductName", DefaultValue = "DELL", IsRequired = true)]  
        public string ProductName  
        {  
            get  
            {  
                return (string)this["ProductName"];  
            }  
            set  
            {  
                value = (string)this["ProductName"];  
            }  
        }  
  
        [ConfigurationProperty("Color", IsRequired = false)]  
        public string Color  
        {  
            get  
            {  
                return (string)this["Color"];  
            }  
            set  
            {  
                value = (string)this["Color"];  
            }  
        }  
        [ConfigurationProperty("Warranty", DefaultValue = "1 Years", IsRequired = false)]  
        public string Warranty  
        {  
            get  
            {  
                return (string)this["Warranty"];  
            }  
            set  
            {  
                value = (string)this["Warranty"];  
            }  
        }  
    }  
}  

この設定を返すために、これをプロパティとして返すクラスをもう1つ作成します。ここでは、プロパティとして複数のクラスを追加することもできます。

using System;  
using System.Collections.Generic;  
using System.Configuration;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace ConfigurationExample  
{  
    public class ProductSettings : ConfigurationSection  
    {  
        [ConfigurationProperty("DellSettings")]  
        public DellFeatures DellFeatures  
        {  
            get  
            {  
                return (DellFeatures)this["DellSettings"];  
            }  
            set  
            {  
                value = (DellFeatures)this["DellSettings"];  
            }  
        }  
    }  
}  

構成セクション内に実装するために、「ProductSettings」のタイプを「ConfigurationExample.ProductSettings」に変更します。これにより、DellFeaturesクラスのすべてのプロパティが返されます。

<?xml version="1.0" encoding="utf-8"?>  
<configuration>  
  <configSections>     
      
    <section name="ProductSettings" type="ConfigurationExample.ProductSettings, ConfigurationExample"/>  
  </configSections>  
  
  <BlogGroup>  
    <PostSetting>  
      <add key="PostName" value="Getting Started With Config Section in .Net"/>  
      <add key="Category" value="C#"></add>  
      <add key="Author" value="Mukesh Kumar"></add>  
      <add key="PostedDate" value="28 Feb 2017"></add>  
    </PostSetting>  
  </BlogGroup>  
    
  <ProductSettings>  
    <DellSettings ProductNumber="20001" ProductName="Dell Inspiron" Color="Black" Warranty="2 Years" ></DellSettings>  
  </ProductSettings>  
    
  <startup>  
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>  
  </startup>  
</configuration>  

このタイプの構成にアクセスするには、最初にカスタムセクションを取得する必要があります。以下に示すように、残りのセクションには非常に簡単にアクセスできます。

//Approach Four  
        public static void GetConfigurationUsingCustomClass()  
        {  
            var productSettings = ConfigurationManager.GetSection("ProductSettings") as ConfigurationExample.ProductSettings;  
            if (productSettings == null)  
            {  
                Console.WriteLine("Product Settings are not defined");  
            }  
            else  
            {  
                var productNumber = productSettings.DellFeatures.ProductNumber;  
                var productName = productSettings.DellFeatures.ProductName;  
                var color = productSettings.DellFeatures.Color;  
                var warranty = productSettings.DellFeatures.Warranty;  
  
                Console.WriteLine("Product Number = " + productNumber);  
                Console.WriteLine("Product Name = " + productName);  
                Console.WriteLine("Product Color = " + color);  
                Console.WriteLine("Product Warranty = " + warranty);  
            }  
        }  

上記のコードを実装すると、次のような出力が得られます。

構成ファイル内で構成設定を定義し、それにアクセス/読み取るさまざまな方法を見てきました。

この投稿がお役に立てば幸いです。次の投稿を改善するのに役立つフィードバックをお寄せください。疑問がある場合は、コメントセクションで質問してください。

#csharp 

リンク: https://www.c-sharpcorner.com/article/four-ways-to-read-configuration-setting-in-c-sharp/