Come dovrebbe essere configurata un'applicazione API Web .Net Core 3.0 a file singolo per cercare il appsettings.json
file che si trova nella stessa directory in cui è costruita l'applicazione a file singolo?
Dopo aver corso
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
La directory è simile alla seguente:
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
Tuttavia, il tentativo di eseguire APPNAME.exe
provoca il seguente errore
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()
...
Ho provato soluzioni da una domanda simile, ma distinta , così come altre domande Stack Overflow.
Ho provato a passare il seguente a SetBasePath()
Directory.GetCurrentDirectory()
environment.ContentRootPath
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
Ciascuno ha portato allo stesso errore.
La radice del problema è che il file PublishSingleFile
binario è decompresso ed eseguito da una temp
directory.
Nel caso di questa app a file singolo, la posizione in cui si trovava appsettings.json
era la seguente directory:
C:\Users\USERNAME\AppData\Local\Temp\.net\APPNAME\kyl3yc02.5zs
Tutti i metodi sopra indicati puntano al punto in cui il file è decompresso, che è diverso dal luogo da cui è stato eseguito.