Nên cấu hình ứng dụng API Web .Net Core 3.0 một tệp như thế nào để tìm appsettings.json
tệp nằm trong cùng thư mục mà ứng dụng tệp đơn được xây dựng?
Sau khi chạy
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
Thư mục trông như thế này:
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
Tuy nhiên, cố gắng chạy APPNAME.exe
kết quả trong lỗi sau
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()
...
Tôi đã thử các giải pháp từ một câu hỏi tương tự, nhưng khác biệt , cũng như các câu hỏi Stack Overflow khác.
Tôi đã cố gắng vượt qua những điều sau đây để SetBasePath()
Directory.GetCurrentDirectory()
environment.ContentRootPath
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
Mỗi cái dẫn đến cùng một lỗi.
Nguyên nhân của vấn đề là PublishSingleFile
nhị phân được giải nén và chạy từ một temp
thư mục.
Trong trường hợp ứng dụng tệp đơn này, vị trí nó đang tìm appsettings.json
là thư mục sau:
C:\Users\USERNAME\AppData\Local\Temp\.net\APPNAME\kyl3yc02.5zs
Tất cả các phương thức trên đều chỉ đến vị trí mà tệp được giải nén, khác với nơi nó được chạy từ đó.