ASP.Net Core 2.2 InProcess托管的Bug:unable to open database file


最近把項目更新到了ASP.Net Core 2.2,發布之后發現在IIS下使用SQLite數據庫不行了,報異常說不能打開數據庫。"unable to open database file",奇了個怪了。照理說這個不是權限就是路徑錯了,權限直接加了Everyone也無濟於事,后來換成絕對路徑就可以了,那說明確實是路徑錯了。

但是寫的相對路徑肯定是沒錯的,使用 dotnet 命令來運行也是正常的, dotnet ZKEACMS.WebHost.dll。

ConnectionString

"ConnectionString": "Data Source=Database.sqlite"

后來想起了之前有看過的這篇令人激動的文章:

就是2.2可以使用In Process的托管模式,說性能有驚天地泣鬼神的提升,就想說會不會是這玩意的問題,畢竟當初升級時也是我主動改的這個:

<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的目錄,難怪相對路徑錯了。

解決方式

主動設置一下當前目錄為程序根目錄:

System.IO.Directory.SetCurrentDirectory(hostingEnvironment.ContentRootPath);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM