值不能为空。参数名称:connectionString发布并部署到CentOS服务器之后

时间:2019-07-10 19:35:27

标签: asp.net-core .net-core

我在appsettings.json和appsettings.Production.json中指定了我的连接字符串,如下所示:

{
    "ConnectionStrings": {
    "Database": "Host=localhost;Port=5432;Database=<mydb>;Username=<myuser>;Password=<mypw>"
}

(我显然已经从字符串中删除了秘密)

然后我发布解决方案。我可以使用dotnet <PathToThePublishedDLL>在同一系统上运行它。但是,当我将发布的文件复制到Linux服务器上并使用该dotnet命令运行它时,出现错误:

System.ArgumentNullException: Value cannot be null.
Parameter name: connectionString
at Npgsql.EntityFrameworkCore.PostgreSQL.Utilities.Check.NotEmpty(String value, 
String parameterName)
at Microsoft.EntityFrameworkCore.NpgsqlDbContextOptionsExtensions.UseNpgsql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 npgsqlOptionsAction)
at MapToGlobe.Startup.<ConfigureServices>b__2_0(DbContextOptionsBuilder options) in [path to the solution folder on my dev pc]\Startup.cs:line 25

在Startup.cs文件中,我有:

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
     services.AddEntityFrameworkNpgsql();
     services.AddDbContext<DatabaseContext>(options => options.UseNpgsql(Configuration.GetConnectionString("Database"))).BuildServiceProvider();
}

第25行是“ services.AddDbContext”行。

我已经找到了许多有关此问题和答案,但是我尝试过的任何方法都没有奏效,目前我不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

最后在这里找到我的答案:https://stackoverflow.com/a/50579414/1078475

它正在我的本地计算机上工作,因为在命令提示符下,我导航到该文件夹​​并运行dotnet <mydll>。而在服务器上,我是使用dotnet <pathtomydll>从根目录运行它的。因为appsettings文件在根文件夹中不存在,所以它不起作用。