惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
量子位
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
IT之家
IT之家
V
Visual Studio Blog
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
D
Docker
V
V2EX

博客园 - uxinxin

.NET10 中配置Swagger的记录 学习使用Taurus的微服务群在.NET Framework4.8环境下的搭建 .net framework 中Owin 通过启动类 Startup.cs 使用 SignalR B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【八】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【七】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【六】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【五】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【四】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【三】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【二】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 .NET程序屏蔽一些无效蜘蛛的访问配置 asp.net 动态加载与卸载程序集的尝试(没有成功)欢迎解决的朋友留言告知 Framework 4.6.2下的SignalR使用,以及WPF下同步使用 react 16.8.4版本中的生命周期中的细节 在组件挂在时使用了定时器的处理——尚硅谷React教程(2022加更,B站超火react教程)学习笔记 CYQ.Data的XML操作的一些自己使用记录 IIS URL Rewrite将伪静态配置文件放在web.config外部 ASP.NET Core EF MVC 登录验证 一步步教你用html+div+css+js基于Jquery实现一套数字华容道游戏
.NET10中通过appsettings.json配置文件获取信息的几个方法
uxinxin · 2026-03-20 · via 博客园 - uxinxin
 1 {
 2   "AppSettings": {
 3     "Name": "配置系统实战应用",
 4     "Version": "1.0.0",
 5     "MaxItems": 100
 6   },
 7   "ConnectionStrings": {
 8     "DefaultConnection": "Server=localhost;Database=SampleDb;Trusted_Connection=True;"
 9   }
10 }

方法1 基于Host.CreateApplicationBuilder

1  using Microsoft.Extensions.Hosting;
2  var builder = Host.CreateApplicationBuilder(args);
3  var env = builder.Environment;
4  Console.WriteLine($"当前环境: {env.EnvironmentName}");
5  Console.WriteLine($"输出Name:{builder.Configuration["AppSettings:Name"]}");

这个用法简单,直接支持命令行传参  dotnet run --environment Production,暂时不知道如何绑定到强类型类。

方法2 基于ConfigurationBuilder

1 var config = new ConfigurationBuilder()
2     .SetBasePath(Directory.GetCurrentDirectory())
3     .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
4     .Build();
5 
6 Console.WriteLine($"AppSettings.Name:{config["AppSettings:Name"]}");
7 Console.WriteLine($"AppSettings.Name1:{config["AppSettings:Name1"]}");

方法3 添加配置到Service容器,让后续可以通过DI注入到类中使用

AppSettings.cs文件中

 1     internal class AppSettingsService
 2     {
 3         private readonly AppSettings _options;
 4         public AppSettingsService(IOptions<AppSettings> options) { 
 5         _options = options.Value;
 6         }
 7         public void Show()
 8         {
 9             Console.WriteLine($"AppSettings.Name:{_options.Name}");
10             Console.WriteLine($"AppSettings.Version:{_options.Version}");
11             Console.WriteLine($"AppSettings.MaxItems:{_options.MaxItems}");
12         }
13     }
    internal class AppSettings
    {
        [Required(ErrorMessage ="Name值不能为空!")]
        public string Name { get; set; }
        public string Version { get; set; }
        public int MaxItems { get; set; }
    }

 这里的serviceCollection.Configure如果要正常使用需要安装包Microsoft.Extensions.Options.ConfigurationExtension

 1 var serviceCollection = new ServiceCollection();
 2 serviceCollection.Configure<AppSettings>(options =>
 3 {
 4     config.GetSection("AppSettings")
 5     .Bind(options);
 6 });
 7 serviceCollection.AddSingleton<AppSettingsService>();
 8 var serviceProvider = serviceCollection.BuildServiceProvider();
 9 
10 try
11 {
12     var s = serviceProvider.GetService<AppSettingsService>();
13     s.Show();
14 }
15 catch (Exception e)
16 {
17     Console.WriteLine(e.Message);
18 }

 方法4 AddOptions并增加数据验证

1 serviceCollection.AddOptions<AppSettings>()
2     .Bind(config.GetSection("AppSettings"))
3     //这一步需要引入Microsoft.Extensions.Options.DataAnnotations包才能正常使用
4     .ValidateDataAnnotations()
5     .ValidateOnStart();

方法5 AddOptionsWithValidateOnStart并增加数据验证

1 serviceCollection
2     .AddOptionsWithValidateOnStart<AppSettings>()
3     .Bind(config.GetSection("AppSettings"))
4     //这一步需要引入Microsoft.Extensions.Options.DataAnnotations包才能正常使用
5     .ValidateDataAnnotations();
 1 <Project Sdk="Microsoft.NET.Sdk">
 2 
 3   <PropertyGroup>
 4     <OutputType>Exe</OutputType>
 5     <TargetFramework>net10.0</TargetFramework>
 6     <ImplicitUsings>enable</ImplicitUsings>
 7     <Nullable>enable</Nullable>
 8   </PropertyGroup>
 9 
10   <ItemGroup>
11     <PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.5" />
12     <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.5" />
13     <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.5" />
14     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
15     <PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.5" />
16     <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.5" />
17     <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="10.0.5" />
18   </ItemGroup>
19 
20   <ItemGroup>
21     <None Update="appsettings.Production.json">
22       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
23     </None>
24     <None Update="appsettings.json">
25       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
26     </None>
27   </ItemGroup>
28 
29 </Project>

如果有代码报错,看看是否缺少引用,比如说引入Json文件需要

Microsoft.Extensions.Configuration.Json,前面也有部分备注,多调试。