Trying to convert Dotnet Core 3.1 to Dotnet6 CONSOLE applications and keep getting
“找不到配置文件‘appsettings.json’ 选修的。预期的物理路径是 'C:\Windows\system32 ppsettings.json'。”
错误信息。问题是,appsettings.json 文件已复制到发布文件夹,但我在应用程序日志中收到错误消息,但没有任何反应。
这里还有其他帖子,但我找不到特定于 DotNet6 的帖子(他们摆脱了 startup.cs 并且做的事情完全不同)并且特定于控制台应用程序。
我将 appsettings.json Build Action 设置为 Content(或什么都没有)并设置为 Copy To Output Directory 到 Copy Always。该文件绝对存在于发布文件夹中(以及它运行的服务器上)。
static async Task Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) //doesn't work on publish (appsettings.json set to "copy always" - no joy) - thing is that is DOES copy it over, but the program can't find it!
.AddJsonFile("appsettings.json")
.Build();
我假设 .SetBasePath 部分与此处的其他解决方案一样不正确,但不能将 dotnet5 解决方案应用于此问题。 我知道我做错了什么,但找不到 DotNet6 控制台应用程序配置的解决方案。有些人建议在 DotNet5 中创建项目,然后转换为 DotNet6,但这并不能真正解决问题(太老套了),我也没有学习新的/正确的配置方法。 有什么想法吗?
好的 - 找到了现在可行的方法。仍然看起来像个杂牌,但它有效,我很高兴......现在。
var configuration = new ConfigurationBuilder()
.SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location))
.AddJsonFile("appsettings.json")
.Build();
当然,有一个内置函数,但我似乎找不到一个发布后有效的例子。
************ 更新 ************************
这非常有效:
var configuration = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
Environment.CurrentDirectory
应该工作。
您可以在这里查看文档。
代码片段看起来像这样
var configuration = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
编辑 2: 我为这里描述的场景找到了一个更优雅的解决方案。请检查我的其他答案。