nlog.config-找不到文件.Net core 3.1和Docker

nlog.config-找不到文件.Net core 3.1和Docker,docker,asp.net-core,nlog,Docker,Asp.net Core,Nlog,我是Docker的新手,我在Main方法的下面一行发现了一个错误,这是一个带Docker的.net core 3.1 API, 当它尝试初始化Nlog时,代码无法找到Nlog.config,文件被配置为始终复制 var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); 这就是我的错误 System.IO.FileNotFoundException: 'Fai

我是Docker的新手,我在Main方法的下面一行发现了一个错误,这是一个带Docker的.net core 3.1 API, 当它尝试初始化Nlog时,代码无法找到Nlog.config,文件被配置为始终复制

var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
这就是我的错误

System.IO.FileNotFoundException: 'Failed to load NLog LoggingConfiguration. 
  Searched the following locations:
     - /app/bin/Debug/netcoreapp3.1/nlog.config
使用IIS运行时,它工作正常

提前谢谢
aa根据您提供的信息很难判断。您是否有任何其他信息-您可以提供/显示相关行的Dockerfile?有一些关于在服务器上停靠Asp.Net核心应用程序的指导原则

如果您的应用程序在IIS中工作,但不是docker,那么我建议您的nlog.config文件不是容器的一部分。或许可以检查一下,在生成过程中,是否已将nlog.config文件复制到输出目录?(在VS2019中,右键单击文件,然后单击属性,然后将“复制到输出目录”设置为“如果更新,则复制”)

您可以构建容器,然后使用以下docker命令进入bash会话以浏览目录/etc:

使用以下内容构建容器:

docker构建-t nlog示例。

使用以下命令输入bash终端会话:

docker-run--rm-it--entrypoint/bin/bash-nlog示例


(注意,nlog示例在我的示例中是docker标记,但您的可能不同)

为处理此环境的人员添加一个额外的答案:
Docker
+
Linux

正如Linux上的
一样,文件系统是区分大小写的
,让我们简单地将配置名称更改为与您在图像中看到的完全相同的名称,区分大小写

但另一方面,如果重命名不起作用,则还需要设置
LogManager.LogFactory.setCandidateConfigFilePath

这里我的配置名是
NLog.config

var fullPath = Directory.GetFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location))
        .FirstOrDefault(x => x.EndsWith("nlog.config", StringComparison.OrdinalIgnoreCase));

LogManager.LogFactory.SetCandidateConfigFilePaths(new[] { fullPath });
var config = Path.GetFileName(fullPath);
return NLogBuilder.ConfigureNLog(config).GetCurrentClassLogger();

您好,文件属性设置为“始终复制”,我从VS 2019运行,我不确定是否获得docker文件(“您可以提供/显示相关行的docker文件”),我检查了visual studio输出中的容器文件,可以看到此app/bin/Debug/netcoreapp3.1/I中的文件正在使用NLog.Config包,并且从包路径引用了NLog.Config,现在我删除了包并手动将NLog.Config添加到项目中,现在它开始工作了。谢谢你还应该给你指一下这里的指南:@Aabidabdulsalam我想你面临的问题和我下面的回答是一样的:Linux容器。你能告诉我你使用的是什么版本的NLog吗?您是否在NetCore上使用单文件发布?想要解决这个问题,所以NLog是开箱即用的。@RolfKristensen那太好了。我们正在使用
NLog.Web.AspNetCore 4.10.0
。开发人员不知道Linux中的文件名区分大小写。谢谢你的修复。是的,但是要修复它,我需要知道它为什么失败。如果你能在这里创建一个问题并附加一个复制该问题的示例项目,那就太好了。实际上这是历史原因,在git源代码管理中,这个配置文件的名称格式不同。所有的微服务都将
nlog.config
编码为config文件名,但是当我开始对接所有服务时,我在Linux映像中发现了不同的配置名称:
nlog.config
nlog.config
nlog.config
等等。实际上,最简单的方法是将这些文件重命名为相同的格式:
nlog.config
,这也可以跳过这个问题。是的,在linux平台上保持所有文件的小写形式会使一切变得更简单。NLog只能看到“NLog.config”和“NLog.config”(在Linux上当NLog.config时失败)