博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【日常排雷】 .Net core 生产环境appsetting读取失败
阅读量:4033 次
发布时间:2019-05-24

本文共 3786 字,大约阅读时间需要 12 分钟。

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

1.问题出现

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

dotnet builddotnet publish -o publishdotnet .\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.
b__5_2(JwtBearerOptions option) in E:\工作事项\code\dev-push\Alipush\AliMobilePush.Webapi\Startup.cs:line 75   at 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.
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.
g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)

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

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

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

3.无意间解决

cd publishdotnet 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

长按二维码关注

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

点外卖,先领券
你可能感兴趣的文章
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(五):Image的各种姿势
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>