关键词System.ArgumentNullException: String reference not set to an instance of a String. (Parameter 's')

1.问题出现

某年某月某日,把webapi开发完了,也通过了swagger进行了单元测试。

dotnet build
dotnet publish -o publish
dotnet .\publish\xx.Webapi.dll

然后String reference not set to an instance of a String. (Parameter 's')

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]An unhandled exception has occurred while executing the request.
System.ArgumentNullException: String reference not set to an instance of a String. (Parameter 's')at System.Text.Encoding.GetBytes(String s)at AliMobilePush.Webapi.Startup.<ConfigureServices>b__5_2(JwtBearerOptions option) in E:\工作事项\code\dev-push\Alipush\AliMobilePush.Webapi\Startup.cs:line 75at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)at Microsoft.Extensions.Options.OptionsMonitor`1.<>c__DisplayClass11_0.<Get>b__0()at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)at System.Lazy`1.CreateValue()at System.Lazy`1.get_Value()at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)at Microsoft.Extensions.Options.OptionsMonitor`1.Get(String name)at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.InitializeAsync(AuthenticationScheme scheme, HttpContext context)at Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext context, String authenticationScheme)at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)

配置文件读出来为null,为什么?

2.难道是非管理员,权限不够?

切换至管理员,运行上述命令,还是报错。

3.无意间解决

cd publish
dotnet xx.Webapi.dll

就能读到了,这是为什么,根据上述命令的差异,大概能猜测到应该是路径不同,导致读取appsetting.json失败。

4.原来是这样

dotnet run,应该会根据env.ContentRootPath(env 的类型是IHostingEnvironment )来读取配置文件 appsettings.Production.jsonappsettings.json文件,ContentRootPath 属性得到的值为当前启动命令的目录,而不是dll所在的目录,所以应在发布项目dll所在的目录执行 dotnet xx.dll,否则会导致配置文件里面的参数读取不到。请看源码和命令对比:

// Host.CreateDefaultBuilder(args)//源码Host.cs
builder.ConfigureAppConfiguration((hostingContext, config) =>{var env = hostingContext.HostingEnvironment;config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true).AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName)){var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));if (appAssembly != null){config.AddUserSecrets(appAssembly, optional: true);}}config.AddEnvironmentVariables();if (args != null){config.AddCommandLine(args);}})

5.参考链接

https://www.cnblogs.com/DHclly/p/9606866.html

https://www.netnr.com/home/list/115

https://github.com/dotnet/extensions.git

https://my.oschina.net/u/4364008/blog/3205437

长按二维码关注

马上就是饭点了,今天怎么吃?

点外卖,先领券

【日常排雷】 .Net core 生产环境appsetting读取失败相关推荐

  1. 结合Jexus + Kestrel 部署 asp.net core 生产环境

    ASP.NET Core 是微软的全新的框架.这一框架的目标 ︰ 跨平台 针对云应用优化 解除 System.Web 的依赖. 获得下面三个方面的优势,你可以把它认为是一个C# 版本的NodeJS: ...

  2. .net Core 生产环境 KestrelServer + Shell 实践

    1.背景描述 原项目部署在windwos 服务器下的windwos 服务程序. 2.现已经改版为Linux Centos 下的服务程序. 环境说明: 服务器系统:CentOS 7.0+ 相关工具:Xs ...

  3. 前端开发-日常开发沉淀之生产环境与开发环境

    获取浏览器: window.location.protocol 获取请求地址:window.location.host, 项目开发实际用途:var hostServer = window.locati ...

  4. saleor的生产环境部署-失败记录

    这个部署最终失败了,失败的报错是:raise exceptions.JSONWebTokenError(_('User is disabled')) 但是下方的部署都是从官方的手册或者github中收 ...

  5. .net core 2.0 部署到centos 7生产环境

    .netcore的跨平台如此之火,忍不住想试试 在linux下部署 .net 程序. 借鉴此篇博文:将ASP.NET Core应用程序部署至生产环境中(CentOS7) 虽然是借鉴,但过程坎坷.对从未 ...

  6. ASP.NET Core 发布至Linux生产环境 Ubuntu 系统

    ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core ...

  7. [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

    在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...

  8. Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持

    Jexus 是一款运行于 Linux 平台,以支持  ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...

  9. asp.net Core多环境读取Json

    IHostingEnviroment 获取环境相关洗洗 IsDevelopment().IsStaging().IsProduction() 分别为:开发.准生产.生产环境 IsEnviroment( ...

最新文章

  1. sqlite java excel,Android将Excel表数据导入SQLite数据库
  2. 006_Gson定制型适配器
  3. 通过一道面试题来看 C++ 语言中的表达式求值
  4. java路径怎么找_Java路径怎么找
  5. linux启动 mongo 不了问题
  6. 服务器v1v2v3v4性能区别,昂达平板电脑V1V2V3V4V5版本之间的区别
  7. c语言写莫迪康通信,组态王modbus通信用法教程modbus-rtu、modbus-tcp莫迪康通信配置步骤...
  8. 微信PC端电脑端多开 CMD打开多个微信
  9. 7-4 出圈游戏 (c 语言)PTA
  10. hdu3911 Black And White (线段树/区间合并)
  11. Numpy 学习专题(十)—— 大作业
  12. 化工学matlab,化工和石化行业
  13. matlab论文答辩题目,毕业设计答辩评及参考题目.doc
  14. wd移动硬盘不能识别_西部数据移动硬盘无法识别恢复
  15. 腾讯云区块链服务(TBaaS)长安链一键上链初体验
  16. OpenCV计算均值和方差
  17. (入门)使用ab进行压力测试
  18. python中的数据类型有哪些是可阅读_Python list data type(list)[学习Python的必要基础知识][阅读本文],列表,数据类型,必备,看此,一篇,就够,了...
  19. 如何通过技术手段批量删除公众号文章?
  20. 地表最全:60种数据可视化图表使用场景大全 !

热门文章

  1. 【NOIP2010】【P1317】乌龟棋
  2. cocos2d-x知识总结
  3. java中List、Map、Set、Collection、Stack、Queue等的使用
  4. Linux 环境变量 $PATH
  5. 一款好的折线图、饼图、柱形图
  6. java避免使用orderby_java – @OrderBy在JPA中无法正常工作
  7. 【本人秃顶程序员】技巧分享丨spring的RestTemplate的妙用,你知道吗?
  8. 人工智能教程007:创建一个卷积神经网络(2)
  9. The SDK platform-tools version ((23)) is too old to check APIs compiled with API 26;
  10. 顺义教委携手华平共建视频图像综合管理平台