c# - 将 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 测试,有些人正在谈论它。我需要另一个配置文件吗?我似乎无法找到一个连贯或完整的答案。谢谢你。
解决方案
我刚刚遇到了同样的问题。您可以做的是手动加载/绑定配置文件,下面是 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");
推荐阅读
- python - 绘制每个日期的发生次数
- java - java spring ws: webServiceTemplate.marshalSendAndReceive 发送前签署文件
- azure - 在 AKS 虚拟节点上运行 Azure Functions 的性能
- docker - 从 docker 容器连接到 ubuntu 端口
- docker - 运行 docker-compose up 时可以附加到集群中的单个容器吗?
- git - Git状态:显示模式(权限)更改
- c++ - 升级Qt5.4.1到5.12.1,现在QCodec给出异常
- sql - SQL 违反 UNIQUE KEY 约束但条目不存在?
- c++ - 为什么未使用的成员模板函数的类模板实例化失败
- php - PHPMailer 添加附件