我有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();
答案 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相关的错误。