使用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.CoreMoq版本:

<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和Castle创建代理对象时出现FileNotFoundException异常

经过深入研究,我找到了问题的原因。它实际上与城堡或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的问题,就像我最初认为的那样。

相关文章:
  • 没有找到相关文章