DotNet6 控制台应用程序在发布后找不到 appsettings.json 文件。 CopyAlways 已打开。文件存在!如何解决?

问题描述 投票:0回答:3

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 DirectoryCopy 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,但这并不能真正解决问题(太老套了),我也没有学习新的/正确的配置方法。 有什么想法吗?

c# .net-core console-application appsettings
3个回答
2
投票

好的 - 找到了现在可行的方法。仍然看起来像个杂牌,但它有效,我很高兴......现在。

          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();

1
投票

AppContext.BaseDirectory
似乎是一种更优雅的方式来代替
Assembly.GetEntryAssembly().Location

您可以在这里查看文档


0
投票

Environment.CurrentDirectory
应该工作。

您可以在这里查看文档

代码片段看起来像这样

var configuration = new ConfigurationBuilder()
                       .SetBasePath(Environment.CurrentDirectory)
                       .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                       .Build();

编辑:这也适用于published apps

编辑 2: 我为这里描述的场景找到了一个更优雅的解决方案。请检查我的其他答案。

© www.soinside.com 2019 - 2024. All rights reserved.