この記事では、Json で構成情報を取得する方法と見てみましょう
この記事で共有するのは、Json で構成情報を取得する方法と情報ですので、コンソール アプリケーションにテスト ポイントを配置しますnetcore のコンソールで設定ファイルを使用することも一般的であり、公式 Web サイトの例では主に json 形式について説明しており、xml 形式についても直接説明しています。この記事を共有することで役立つことを願っています。あなた;
Json 設定情報を取得します
XML 設定情報を取得します
設定ファイルをアプリケーションから分離できますか? 答えは「はい」です
まず、コンソール アプリケーションで次の nuget パッケージを参照する必要があります (ここでのテストは 2.0 に基づいています):
Install-Package Microsoft.Extensions.Configuration -Version 2.0.0 Install-Package Microsoft.Extensions.Configuration.Abstractions -Version 2.0.0
Json 構成情報を取得します
json 構成を取得するには、上記の 2 つの参照に加えて、次の引用も必要です:
Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.0これは、コンソール アプリケーションで appsettings.json ファイルを作成し、次の json 構成ファイル情報を定義します。
{ "MyConfig": { "UserName": "神牛步行3", "userPwd": "666666", "GaoDeApi": { "UserName": "神牛步行1", "userPwd": "111111" }, "BaiDuApi":{ "userName": "神牛步行2", "userPwd": "222222" } } }次に、ファイル情報を取得するには、次のコードのみが必要です:
var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest"; sbLog.Append($"配置文件所在目录:{configBasePath}\n"); var builder = new ConfigurationBuilder(). SetBasePath(configBasePath). AddJsonFile("appsettings.json"); var config = builder.Build(); sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}");すでにコア開発の経験がある友人にとっては、上記は直接理解できますが、完全な説明のために、まだ簡単に説明する必要があります:
ConfigurationBuilder インスタンスの後、SetBasePath メソッドを使用して構成ファイルのベース パスを設定し、AddJsonFile 拡張メソッドを使用して読み取られるファイル名を指定する必要があります。これらの手順は IConfigurationBuilder を返します。このビルダーは、start の意味と少し似ています:
プログラムの美しさと多用途性のために、json ファイルのカプセル化を次のように示します:
/// <summary> /// json配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetJsonConfig( string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). SetBasePath(basePath). AddJsonFile(configFileName); return builder.Build(); }ここです。AddJsonFile メソッドは、冒頭で参照した Microsoft.Extensions.Configuration.Json を通じて拡張されていることに注意してください。 IConfiguration は GetSection 関数を使用するだけでなく、この [文字列キー] メソッドに従ってノードを取得することもできるため、次のようにノード情報を構成するためのコードとレンダリングを取得します。
var configJson = GetJsonConfig(); sbLog.Append($"json配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n");
注: ノードは大文字と小文字を区別しません。マルチレベル ノードは ':' を使用して取得します。
Install-Package Microsoft.Extensions.Configuration.Xml -Version 2.0.0次に、json とほぼ同じコードを使用して XML 構成ファイルを取得します:
/// <summary>
/// xml配置文件读取
/// </summary>
/// <param name="configFileName"></param>
/// <param name="basePath"></param>
/// <returns></returns>
public static IConfigurationRoot GetXmlConfig(
string configFileName = "appsettings.xml",
string basePath = "")
{
basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath;
var builder = new ConfigurationBuilder().
//SetBasePath(basePath).
AddXmlFile(b =>
{
b.Path = configFileName;
b.FileProvider = new PhysicalFileProvider(basePath);
});
return builder.Build();
}
違いは、IConfigurationBuilder の AddXmlFile メソッドを拡張することです。この例では、構成ファイル名と基本パスを渡すために public static IConfigurationBuilder AddXmlFile(この IConfigurationBuilder ビルダー、Actionae92d117680019c8adb696c6f7aa0015 configureSource) を使用します。 appsettings.xml 設定ファイル情報:
<MyConfig> <GaoDeApi> <UserName des="高德的账号">神牛步行1</UserName> <userPwd>111111</userPwd> </GaoDeApi> <BaiDuApi> <userName des="百度的账号">神牛步行2</userName> <userPwd>222222</userPwd> </BaiDuApi> </MyConfig>
var configXml = GetXmlConfig(); sbLog.Append($"xml配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configXml.GetSection("GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configXml["BaiDuApi:UserName"]}\n\r\n");
XML ノードを取得します。属性値
通常xml配置文件节点还有属性(attribute),如上面的xml节点: 7a286013418a1834dc7c3eeef39dd0f2神牛步行100d001d0ea2d832461d3ff9217bf550e ,这个des=""就是属性,我们要怎么才能获取这个值呢;这里其实同样还是通过':'来关联的,如下代码获取属性节点des的值:
sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n"); sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n");
xml属性节点名称不能是name,不然是无法读取成功的;如这里的des改成name名称的话,无法正常获取信息,谨记于心;
配置文件能否不和应用放在一起呢? 答案是肯定的
有部分朋友会提出一个问题:配置文件能否不和应用放在一起呢? 答案是肯定的,我们只需把Directory.GetCurrentDirectory()(获取当前应用所在磁盘目录)替换成配置文件所在的基础目录就行了,如我这里的: configBasePath = @"D:\D\TTest";
下面是本次实例的整个测试用例代码:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.FileProviders; using System; using System.Diagnostics; using System.IO; using System.Text; namespace MyService { class Program { static void Main(string[] args) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); Console.OutputEncoding = Encoding.GetEncoding("GB2312"); var sbLog = new StringBuilder(string.Empty); var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest"; sbLog.Append($"配置文件所在目录:{configBasePath}\n"); var builder = new ConfigurationBuilder(). SetBasePath(configBasePath). AddJsonFile("appsettings.json"); var config = builder.Build(); sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}\n\r\n"); var configJson = GetJsonConfig(); sbLog.Append($"json配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n"); var configXml = GetXmlConfig(); sbLog.Append($"xml配置-MyConfg节点的值:\n"); sbLog.Append($"高德-UserName:{configXml.GetSection("GaoDeApi:UserName").Value}\n"); sbLog.Append($"百度-userName:{configXml["BaiDuApi:UserName"]}\n\r\n"); sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n"); sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n"); Console.WriteLine(sbLog); Console.ReadLine(); } /// <summary> /// json配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetJsonConfig( string configFileName = "appsettings.json", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). SetBasePath(basePath). AddJsonFile(configFileName); return builder.Build(); } /// <summary> /// xml配置文件读取 /// </summary> /// <param name="configFileName"></param> /// <param name="basePath"></param> /// <returns></returns> public static IConfigurationRoot GetXmlConfig( string configFileName = "appsettings.xml", string basePath = "") { basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath; var builder = new ConfigurationBuilder(). //SetBasePath(basePath). AddXmlFile(b => { b.Path = configFileName; b.FileProvider = new PhysicalFileProvider(basePath); }); return builder.Build(); } } }
以上が.NetCore が Json および Xml 形式で構成情報を取得する方法の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。