ASP.NET 设置 DBContext 时出现 Core 2.2 错误(适用于 Kestrel,不适用于 IIS Express)

ASP.NET Core 2.2 error when setting up DBContext (works in Kestrel, not in IIS Express)

我有一个 .Net Core 2.2 Web 项目,我在 Startup.cs 文件中设置了 dbcontext 连接:

services.AddDbContext<FirmDirectoryContext>(options =>  
              options.UseSqlServer(Configuration.GetConnectionString("DefaultDatabase")));

当我 运行 这是 Kestrel 时,它可以工作,但是如果我尝试 运行 使用 IIS Express,我会得到以下信息:

{System.ArgumentNullException: Value cannot be null. Parameter name: connectionString

连接字符串显然是在appsettings.json文件中设置的,否则Kestrel也会失败?

如果您的环境设置为开发环境,dotnet 从 appsettings.development.json 获取连接字符串。

确保您也在那里设置了连接字符串。

我不确定你的 appsettings.json 是什么样子,但你的 json 文件中应该有这样一个部分:

"ConnectionStrings": {
    "DefaultDatabase": "<Your connection string>"
}

看来问题出在我的 Program.cs 文件中。我从 .NET Core 2.1 项目中复制了一些代码

WebHost.CreateDefaultBuilder(args)
     .UseContentRoot(Directory.GetCurrentDirectory())
     .UseWebRoot(Directory.GetCurrentDirectory() + "\wwwroot") // THIS LINE FIXES STATIC FILES ON PROD
     .UseIISIntegration()
     .UseStartup<Startup>();

一旦我编辑它以删除 Directory.GetCurrentDirectory() 代码,它就可以工作了。

WebHost.CreateDefaultBuilder(args)
     .UseIISIntegration()
     .UseStartup<Startup>();

现在我必须在服务器上测试它是否仍然有效。感谢您的回复。