ควรกำหนดค่าแอปพลิเคชันไฟล์. Net Core 3.0 Web API แบบเดี่ยวให้ค้นหาappsettings.json
ไฟล์ที่อยู่ในไดเรกทอรีเดียวกันกับที่มีไฟล์แอปพลิเคชันเดี่ยวสร้างอยู่หรือไม่
หลังจากวิ่ง
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
ไดเรกทอรีมีลักษณะดังนี้:
XX/XX/XXXX XX:XX PM <DIR> .
XX/XX/XXXX XX:XX PM <DIR> ..
XX/XX/XXXX XX:XX PM 134 appsettings.json
XX/XX/XXXX XX:XX PM 92,899,983 APPNAME.exe
XX/XX/XXXX XX:XX PM 541 web.config
3 File(s) 92,900,658 bytes
อย่างไรก็ตามการพยายามเรียกใช้APPNAME.exe
ผลลัพธ์ในข้อผิดพลาดต่อไปนี้
An exception occurred, System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional. The physical path is 'C:\Users\USERNAME\AppData\Local\Temp\.net\APPNAME\kyl3yc02.5zs\appsettings.json'.
at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
...
ฉันลองวิธีแก้ปัญหาจากคำถามที่คล้ายกัน แต่แตกต่างกันเช่นเดียวกับคำถามอื่น ๆ จาก Stack Overflow
ฉันพยายามที่จะผ่านดังต่อไปนี้เพื่อ SetBasePath()
Directory.GetCurrentDirectory()
environment.ContentRootPath
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
แต่ละข้อผิดพลาดเดียวกัน
รากของปัญหาคือPublishSingleFile
ไบนารีถูกคลายซิปและเรียกใช้จากtemp
ไดเรกทอรี
ในกรณีของแอพไฟล์เดียวนี้ตำแหน่งที่ค้นหาappsettings.json
คือไดเรกทอรีต่อไปนี้:
C:\Users\USERNAME\AppData\Local\Temp\.net\APPNAME\kyl3yc02.5zs
วิธีการทั้งหมดข้างต้นชี้ไปยังตำแหน่งที่ไฟล์ถูกซิปไปซึ่งแตกต่างจากที่ที่มันถูกเรียกใช้