最近把項目更新到了ASP.Net Core 2.2,發佈以後發如今IIS下使用SQLite數據庫不行了,報異常說不能打開數據庫。"unable to open database file",奇了個怪了。照理說這個不是權限就是路徑錯了,權限直接加了Everyone也無濟於事,後來換成絕對路徑就能夠了,那說明確實是路徑錯了。git
可是寫的相對路徑確定是沒錯的,使用 dotnet 命令來運行也是正常的, dotnet ZKEACMS.WebHost.dll。github
"ConnectionString": "Data Source=Database.sqlite"
後來想起了以前有看過的這篇使人激動的文章:web
就是2.2能夠使用In Process的託管模式,說性能有驚天地泣鬼神的提高,就想說會不會是這玩意的問題,畢竟當初升級時也是我主動改的這個:sql
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel> </PropertyGroup> </Project>
因而我改了一下web.config,切換成使用舊的模式: modules="AspNetCoreModuleV2" ->
modules="AspNetCoreModule",而後程序就正常運行了。
數據庫
妥妥的寫個issue給微軟:https://github.com/aspnet/AspNetCore/issues/6117性能
我再使用In Process的託管模式作了一下debug,看到了使人驚奇的結果,這個當前目錄居然變成了IIS的目錄,難怪相對路徑錯了。spa
主動設置一下當前目錄爲程序根目錄:debug
System.IO.Directory.SetCurrentDirectory(hostingEnvironment.ContentRootPath);