在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) 。