日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發布時間:2023/12/4 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【日常排雷】 .Net core 生产环境appsetting读取失败 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關鍵詞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.json 和 appsettings.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读取失败的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。