首页 > 解决方案 > 将 log4net 的程序集信息配置添加到 .NET Core xunit 项目中

问题描述

我们正在 .NET Core 2.1 中为 .NET Framework 4.6.1 的应用程序创建一个 XUnit 测试项目,以便我们可以测试对功能和技术债务清理所做的更改。我们遇到了一个更重要的单元测试的障碍,导致我们将 Log4Net NuGet 包添加到单元测试项目中。添加它后,我们会收到以下错误:

Message: System.MissingMethodException : Method not found: 'log4net.ILog log4net.LogManager.GetLogger(System.String)'.

经过一番研究,我发现该错误是由于缺少 XMLConfigurator 的项目缺少配置引起的。通常,在 .NET Framework 中,您将使用以下行编辑 AssemblyInfo.cs 文件(根据先前的堆栈溢出答案):

[assembly: log4net.Config.XmlConfigurator]

但是,我们没有 AssemblyInfo.cs 文件、任何 app.config 文件或 json 配置文件。在 .NET Core 中,是否需要添加此配置?我是否将它(以及如何)添加到 .csproj 文件中?我们没有该项目的单一入口点,因为它只是 xunit 测试,有些人正在谈论它。我需要另一个配置文件吗?我似乎无法找到一个连贯或完整的答案。谢谢你。

标签: c#.net-coreconfigurationlog4net

解决方案


我刚刚遇到了同样的问题。您可以做的是手动加载/绑定配置文件,下面是 4 行代码

(1) 将 Log4net.config 文件添加到您的解决方案 (2) 将以下内容添加到您的解决方案

    ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
string DirPath = Directory.GetCurrentDirectory();
XmlConfigurator.Configure(logRepository, new FileInfo(Path.Combine(DirPath, "log4net.config")));

log.Debug("This is a Log4Net Debug message");
log.Info("This is a Log4Net Info message");
log.Warn("This is a Log4Net Warning message");
log.Error("This is a Log4Net Error message");
log.Fatal("This is a Log4Net Fatal message");

推荐阅读