在 dotnet core 2.1 中编译后 appsettings 在哪里

Where are appsettings after compiled in a dotnet core 2.1

我试图了解 appsettings.jsonappsettings.{Environment}.json 以及环境变量如何在 dotnet core 2.1 应用程序中发挥作用,但我不知道应用程序设置在运行时如何(无论最终结果如何) transformation is) 被应用程序访问。

我希望在编译的 dll 中有应用程序设置(例如:MyWebApiApp\bin\Debug\netcoreapp2.1),但我在那里没有看到它。

了解这一点将帮助我找出 OpenShift configmaps 与 appsettings 的最佳方法,因为我需要知道我是否应该在运行时依赖 appsettings,或者 appsettings 是否对开发有用但在生产中我应该依赖环境而是变量。

谢谢!

您 运行 是从 Visual Studio 中获取代码吗?默认 CreateDefaultBuilder 使用 Directory.GetCurrentDirectory() 来确定从哪个文件夹加载设置文件。当您从 Visual Studio 中 运行ning 时,当前目录是您的项目目录 - 所以当您 run/debug 程序时,它会找到正确的设置文件。

测试此方法的一种方法是更改​​为命令行,运行 您的应用程序使用 dotnet myapp.dll。如果您从 appsettings 文件加载设置,它将找不到该文件并且设置将为空。

如果您将 appsettings 文件的属性更改为 copy if newer 并重建您的应用程序,当您从命令行 运行 它时,它将正确找到设置文件。

您可以通过查看 implementation file 了解虚拟主机如何确定要使用的设置。但是,简而言之,dotnetcore 将按以下顺序使用设置:

  • appsettings.json
  • 环境变量
  • 命令行

这方面的文档是 here

因此,如果应用程序部署后某些设置可能会更改,那么您可以通过环境变量覆盖它们。如果你想以这种方式配置,你可以重新部署 appsettings 文件,但根据我的经验,通过环境变量处理生产设置要容易得多,可能使用第三方工具,例如傀儡

希望对您有所帮助。