使用Moq和Castle创建代理对象时出现FileNotFoundException异常
本文关键字:FileNotFoundException 异常 对象 代理 Moq Castle 创建 使用 | 更新日期: 2023-09-27 18:08:04
我有一个基本抽象类,它存在于一个nuget包中,我要为它实现一个具体的类,就像这样:
public class MyConcreteClass : MyBaseAbstractClass<SomeType> {
public MyConcreteClass(IAnInterfaceOne interfaceOne, IAnInterfaceTwo interfaceTwo) : base(interfaceOne, interfaceTwo) { }
}
我像这样模拟这两个参数:
var mockFirst = new Mock<IAnInterfaceOne>();
var mockSecond = new Mock<IAnInterfaceTwo>();
和这样的具体类:
var mockConcrete = new Mock<MyConcreteClass>(mockFirst.Object, mockSecond.Object);
当我试图访问mockConcrete
Object
属性时var concreteObjectInstance = mockConcrete.Object
我得到一个FileNotFoundException
, Could not load file or assembly 'Serilog.dll'
和调试器在VS指向基础构造函数调用异常来自哪里:
base(interfaceOne, interfaceTwo)
Castle.Core
和Moq
版本:
<package id="Castle.Core" version="3.3.3" targetFramework="net452" />
<package id="Moq" version="4.5.21" targetFramework="net452" />
我已经搜索了基类所在的nuget包,没有引用或使用serilog。我搜索了Castle.Core
的repo,发现了很多serilog的用法,我相信它是一个日志库。所以我有点困惑这个异常是如何发生的,以及我如何尝试解决它,所以当我模拟我的对象时,它不会抛出异常。
经过深入研究,我找到了问题的原因。它实际上与城堡或moq无关。这实际上是由参数引起的。. NET是MyBaseAbstractClass<T>
中引用的nuget包。这一行在基类中:
private readonly Metrics.Timer _callTimer = Metric.Timer("", Unit.Calls, SamplingType.LongTerm, TimeUnit.Milliseconds);
,并且每次在该行初始化基类时都会抛出异常。我查看了Metrics.NET
引用的包,并看到了LibLog
。所以我查看了LibLog
,发现它引用了Serilog
。所以我不知道为什么Serilog
仍然不能在这些包中找到,但我删除了抛出异常的行,因为它是未使用的,也删除了Metrics.NET
包。我回答我的问题是为了确保人们知道这不是Castle或Moq的问题,就像我最初认为的那样。