首页 > 解决方案 > 部署时的 ASP .NET Core 3 MVC 连接字符串问题

问题描述

场景

我正在创建一个应用程序并将其托管在 Windows Server 2012 上。开发时,localdb 可以使用以下连接字符串正常工作:

"ConnectionStrings": {
    "DatabaseConnection": "Server=.\\SQLEXPRESS;AttachDBFilename=[DataDirectory]\\<database name>.mdf;Integrated Security=True;"
  }

其中 [DataDirectory] ​​在 Startup.cs 中设置:

    var path = AppDomain.CurrentDomain.BaseDirectory;
    path = Path.GetFullPath(Path.Combine(path, @"..\..\..\wwwroot\<folder name>"));
    AppDomain.CurrentDomain.SetData("DataDirectory", path);
    services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DatabaseConnection").Replace("[DataDirectory]", path)));

在我的本地机器上测试它会产生预期的结果。

问题

将其发布到服务器后(.mdf 和 _log.ldf 文件位于 wwwroot 下的文件夹中,它们也已发布),它不再工作:

错误。处理您的请求时发生错误。开发模式切换到开发环境将显示有关所发生错误的更详细信息。不应为已部署的应用程序启用开发环境。它可能导致向最终用户显示来自异常的敏感信息。对于本地调试,通过将 ASPNETCORE_ENVIRONMENT 环境变量设置为 Development 并重新启动应用程序来启用开发环境。

我将 ASPNETCORE_ENVIRONMENT 环境变量设置为Development并重新发布了应用程序,但这仍然是我得到的唯一错误消息,没有详细信息。

可能的解决方案

根据我的研究,不建议在生产中使用AttachDBFilename,最好在主机上设置 SQL DB。不想详细说明,即使使用免费版本的 SQL DB (Express) 的想法也被拒绝,尽管我猜这会使解决问题变得更容易一些(调整连接字符串)。这意味着我必须使用这个AttachDBFilename解决方法,即使它并不理想。

(尝试以许多不同的方式修改连接字符串,但没有运气。我还添加了标签Initial Catalog=(database name),即使它在本地工作,在远程它也没有改变)。

任何帮助将不胜感激,谢谢。

标签: c#asp.net-mvcsql-server-express.net-core-3.0ef-core-3.0

解决方案


推荐阅读