取消

Linux系统.net core控制台程序配置目录不对问题

在linux中使用dotnet /aaa/bbb/xxx.dll运行程序,如果目录不是dll的目录,会出现无法读取到appsetting.json的情况


问题

在linux中使用dotnet /aaa/bbb/xxx.dll运行程序,如果目录不是dll的目录,会出现无法读取到appsetting.json的情况

解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   builder.ConfigureAppConfiguration((hostingContext, config) =>
    {
        var env = hostingContext.HostingEnvironment;
++      config.SetBasePath(_hostingEnvironment.ContentRootPath)
        config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

        if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName))
        {
            var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
            if (appAssembly != null)
            {
                config.AddUserSecrets(appAssembly, optional: true);
            }
        }

        config.AddEnvironmentVariables();

        if (args != null)
        {
            config.AddCommandLine(args);
        }
    });

原因

因为主机程序是基于当前执行dotnet命令的目录来读取配置文件的,如果不是在dll目录直接执行,就会找不到,需要按照上述设置一下配置目录。


参考资料

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/Linux%E7%B3%BB%E7%BB%9F.net-core%E6%8E%A7%E5%88%B6%E5%8F%B0%E7%A8%8B%E5%BA%8F%E9%85%8D%E7%BD%AE%E7%9B%AE%E5%BD%95%E4%B8%8D%E5%AF%B9%E9%97%AE%E9%A2%98 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论