最近把项目更新到了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);