単一ファイルの.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()
...
私は、似ているが明確な質問と、他のスタックオーバーフローの質問からの解決策を試しました。
私は以下を渡そうとしました SetBasePath()
Directory.GetCurrentDirectory()
environment.ContentRootPath
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
それぞれが同じエラーにつながりました。
問題の根本は、PublishSingleFile
バイナリが解凍され、temp
ディレクトリから実行されることです。
この単一ファイルアプリの場合、探していた場所appsettings.json
は次のディレクトリでした。
C:\Users\USERNAME\AppData\Local\Temp\.net\APPNAME\kyl3yc02.5zs
上記のすべての方法は、ファイルの解凍先を指します。これは、実行された場所とは異なります。