Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Mono中的程序集加载log4net配置_C#_Mono_Log4net_Monodevelop - Fatal编程技术网

C# 从Mono中的程序集加载log4net配置

C# 从Mono中的程序集加载log4net配置,c#,mono,log4net,monodevelop,C#,Mono,Log4net,Monodevelop,我正在用Mono开发一个C#应用程序,并尝试使用log4net。当我手动加载配置时,记录器工作正常,但是,我想要更优雅的配置 在log4net文档中,它声明可以使用以下(或类似)行从程序集加载配置: [程序集:log4net.Config.XmlConfigurator(ConfigFileExtension=“log4net”,Watch=true)] 我已经确保配置文件被移动到build目录并具有该扩展名。我还确保AssemblyInfo.cs在MonoDevelop中标记为“应用程序定义”

我正在用Mono开发一个C#应用程序,并尝试使用log4net。当我手动加载配置时,记录器工作正常,但是,我想要更优雅的配置

在log4net文档中,它声明可以使用以下(或类似)行从程序集加载配置:

[程序集:log4net.Config.XmlConfigurator(ConfigFileExtension=“log4net”,Watch=true)]

我已经确保配置文件被移动到build目录并具有该扩展名。我还确保AssemblyInfo.cs在MonoDevelop中标记为“应用程序定义”。我不知道这为什么不起作用。有人有什么想法吗


顺便说一句:我已经找遍了所有的地方,试图找到答案。我还尝试从一个资源加载配置,但也不想工作。

在log4net中使用多个配置文件是可能的,但很尴尬。请参见此处的讨论:

您是否在.exe和.dll中进行日志记录

你能用一个配置文件吗

请记住文档中的本节:“如果使用配置属性,则必须调用log4net以允许它读取属性。对LogManager.GetLogger的简单调用将导致读取和处理调用程序集上的属性。因此,必须在应用程序启动期间,以及在加载和调用任何外部程序集之前,尽早进行日志记录调用。”

试着把这个问题归结为一个简单的例子

  • 确保配置文件名为exename.exe.log4net
  • 确保将问题中的AssemblyAttribute放入.exe的AssemblyInfo.cs中
  • 确保在从.DLL调用任何代码之前,尽快在.exe中调用LogManager.GetLogger

是根据您的.exe命名的.log4net文件吗?例如,myapp.exe.log4netNo,它应该是吗?我看到过类似的例子,但没有人说它“必须是”。我假设它只是一个约定。尝试它只是为了好玩,结果相同:没有日志消息。文档说它必须是:“如果指定了ConfigFileExtension,这是配置文件的扩展名。程序集文件名用作基名称,并附加此扩展名。例如,如果从文件TestApp.exe加载程序集,并且ConfigFileExtension属性设置为log4net,则配置文件名为TestApp.exe.log4net。这相当于将ConfigFile属性设置为TestApp.exe.log4net。“()解决方案的设置是什么?单个.exe?没有项目引用?