You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 9 Blazor Web App部署IIS后无法访问SQLite数据库求助

解决方案与排查步骤

一、解决SQLite Error 14(无法打开数据库文件)

这个错误90%以上是路径错误或权限不足导致,以下是你可能遗漏的操作:

  • 强制使用绝对路径配置连接字符串
    调试时相对路径(如Data Source=Data/MyDb.db)能正常工作,但IIS的工作目录并非站点根目录,会导致路径解析错误。修改appsettings.json或appsettings.Production.json的连接字符串为绝对路径:

    "ConnectionStrings": {
      "BlazorWebAppAdminContext": "Data Source=C:\\inetpub\\wwwroot\\YourBlazorApp\\Data\\MyDb.db"
    }
    

    或者在代码中动态拼接绝对路径(更灵活):

    var dbPath = Path.Combine(AppContext.BaseDirectory, "Data", "MyDb.db");
    builder.Services.AddDbContext<BlazorWebAppAdminContext>(options =>
        options.UseSqlite($"Data Source={dbPath}"));
    
  • 给应用池身份授予完整权限
    如果你用的是默认的ApplicationPoolIdentity,仅添加IIS_IUSRS和IUSR权限不够,需要给应用池专属虚拟账户授权:

    1. 右键数据库所在文件夹 → 属性 → 安全 → 编辑 → 添加
    2. 在“输入对象名称”中输入IIS AppPool\[你的应用池名称](比如IIS AppPool/BlazorWebAppPool)
    3. 授予该账户读取、写入、修改权限,应用到文件夹及所有子文件
  • 检查父文件夹权限
    SQLite需要遍历数据库文件的父路径,确保从站点根目录到Data文件夹的每一层父目录,都给上述应用池账户或IIS_IUSRS授予读取权限

二、解决“未应用的迁移”问题

这个问题通常和SQLite Error 14关联,因为迁移执行失败才会提示未应用:

  • 手动执行迁移命令
    在服务器上打开命令提示符,切换到你的站点发布目录,执行以下命令(确保服务器已安装.NET 9 SDK):

    dotnet ef database update --context BlazorWebAppAdminContext
    

    如果没有安装SDK,可以在本地生成迁移SQL脚本,再用SQLite工具(如SQLite Studio)执行:

    dotnet ef migrations script --context BlazorWebAppAdminContext -o migrations.sql
    
  • 确认迁移代码在部署时被正确包含
    检查项目文件(.csproj)是否包含迁移相关文件:

    <ItemGroup>
      <Compile Include="Migrations\**" />
      <EmbeddedResource Include="Migrations\**\*.resx" />
    </ItemGroup>
    
  • 验证连接字符串一致性
    确保调试环境和生产环境的BlazorWebAppAdminContext连接字符串完全一致,避免指向不同的数据库文件

三、遗漏的IIS配置检查

  • 设置应用池为“无托管代码”
    打开IIS管理器 → 应用池 → 选择你的应用池 → 高级设置 → 将“.NET CLR版本”设置为无托管代码(Blazor Web App基于ASP.NET Core,不需要传统.NET CLR托管)

  • 确认ASP.NET Core托管捆绑包安装正确
    虽然你升级了托管包,但要确保Windows Server 8.5上安装的是对应.NET 9版本的ASP.NET Core托管捆绑包,且IIS的ASP.NET Core模块已启用

  • 排查文件锁定问题
    重启应用池,或者用Process Explorer工具检查数据库文件是否被其他进程(如之前的IIS Worker Process)占用,释放后再重新部署

四、是否为.NET 9 Bug?

目前来看,这类问题绝大多数是配置或环境权限问题,并非.NET 9或SQLite的官方Bug。如果上述所有步骤都验证通过仍无法解决,可以去dotnet/efcore或dotnet/aspnetcore的GitHub仓库搜索同类Issue,确认是否存在特定场景下的兼容性问题,但概率极低。

内容的提问来源于stack exchange,提问作者DevQt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:28:24