我在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”行。
我已经找到了许多有关此问题和答案,但是我尝试过的任何方法都没有奏效,目前我不确定该怎么做。
答案 0 :(得分:0)
最后在这里找到我的答案:https://stackoverflow.com/a/50579414/1078475
它正在我的本地计算机上工作,因为在命令提示符下,我导航到该文件夹并运行dotnet <mydll>
。而在服务器上,我是使用dotnet <pathtomydll>
从根目录运行它的。因为appsettings文件在根文件夹中不存在,所以它不起作用。