欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-14 11:01:17
最近把项目更新到了ASP.Net Core 2.2,发布之后发现在IIS下使用SQLite数据库不行了,报异常说不能打开数据库。"unable to open database file",奇了个怪了。照理说这个不是权限就是路径错了,权限直接加了Everyone也无济于事,后来换成绝对路径就可以了,... ......

最近把项目更新到了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的目录,难怪相对路径错了。

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

解决方式

主动设置一下当前目录为程序根目录:

system.io.directory.setcurrentdirectory(hostingenvironment.contentrootpath);