使用 Moq 和 Castle 创建代理对象时出现 FileNotFoundException

FileNotFoundException when creating a proxy object using Moq and Castle

我有一个基础摘要 class 存在于我正在为其实现具体 class 的 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>();

具体的class是这样的:

var mockConcrete = new Mock<MyConcreteClass>(mockFirst.Object, mockSecond.Object);

当我尝试访问 mockConcrete

中的 Object 属性 时
var concreteObjectInstance = mockConcrete.Object

我得到一个 FileNotFoundExceptionCould 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" />

我已经搜索了基础 class 所在的 nuget 包,没有任何关于 serilog 的引用或用法。我 searched Castle.Core's repo and found many usages of serilog 我认为这是一个日志库。所以我对这个异常是如何发生的以及我如何尝试解决它有点困惑,这样当我模拟我的对象时它就不会抛出异常。

经过深挖,我找到了问题的原因。它实际上与城堡或最小起订量无关。它实际上是由 Metrics.NET 引起的,它是 MyBaseAbstractClass<T> 中引用的 nuget 包。这条线在基地 class:

private readonly Metrics.Timer _callTimer = Metric.Timer("", Unit.Calls, SamplingType.LongTerm, TimeUnit.Milliseconds);

并且每次在该行初始化基础 class 时都会抛出异常。我looked at the packages Metrics.NET was referencing and saw LibLog. So I looked into LibLog and saw it was referencing Serilog。所以我不确定为什么 Serilog 仍然无法在这些包中找到,但是我删除了抛出异常的行,因为它无论如何都没有被使用,并且还删除了 Metrics.NET 包。我正在回答我的问题,以确保人们知道这不是 Castle 或 Moq 的问题,就像我最初认为的那样。