发布.Net Core 2应用程序不读取appsettings.json文件

时间:2018-05-29 06:51:25

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

我有2个应用程序,一个控制台,一个web api .net core v2.0。两者都有同样的问题。

我曾经通过源文件运行我的应用程序。我正在linux机器上构建和运行它们。一切都很好,一切都很棒,但现在我通过发布输出运行相同的应用程序。

现在它无法正常工作,因为应用无法读取appsettings.json。

configuration["Settings:Port"] != null 
? int.Parse(configuration["Settings:Port"]) //i should be getting this - 1234
: default(int) //but instead i got this - 0

我已经损坏了appsettings.json文件,我希望看到一个例外,但没有。根本不值一提。我检查了几次文件,我修改了文件几次只是因为我绝望了。没有。没有任何事情发生,没有任何改变。

我尝试了debug-build,我尝试了发布 - 构建,我试图改变该文件的构建操作......我试过这个,我试过......没有什么工作,我不知道为什么。

正如你猜测的那样,我需要一些建议。谢谢大家。

编辑:

我如何使用/读取配置文件:

IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true, true).Build();

2 个答案:

答案 0 :(得分:5)

问题是我正在运行应用程序的路径。

我正在运行命令从根目录(/)启动应用程序。应用程序运行正常,但显然找不到appsettings.json文件。

我尝试从Project路径启动应用程序,所以我进入Project目录,运行命令,一切恢复正常。

此处有详细解释:

当我运行上面提到过的那些应用程序时,我曾经使用cd进入他们的目录并执行“dotnet run”。

cd /blabla/etcetc
dotnet run

然而,在我发布它们之后,我无法使用相同的命令。我不得不指定它的dll。然后我想,我可以在没有进入目录的情况下运行它们。

dotnet /blabla/etcetc/my.project.dll

这就是问题所在。而不是这样做,现在我正在这样做;

cd /blabla/etcetc
dotnet my.project.dll

答案 1 :(得分:2)

我所做的是将Directory.GetCurrentDirectory()更改为AppContext.BaseDirectory,这解决了所有与appsettings和config相关的错误。