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

时间:2016-09-21 18:58:10

标签: c# moq castle-dynamicproxy

我有一个基本的抽象类,它存在于一个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);

当我尝试访问Object

中的mockConcrete属性时
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" />

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

1 个答案:

答案 0 :(得分:0)

经过深入挖掘后,我找到了问题的原因。它实际上与城堡或moq无关。它实际上是由Metrics.NET引起的,它是MyBaseAbstractClass<T>中引用的nuget包。这一行在基类中:

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

每次在该行初始化基类时都会抛出异常。我looked at the packages Metrics.NET was referencing并看到了LibLog。所以我查看了LibLog并看到它是referencing Serilog。所以我不确定为什么在这些软件包中仍然找不到Serilog,但我删除了引发异常的行,因为它仍然未被使用,并且还删除了Metrics.NET包。我正在回答我的问题,以确保人们知道Castle或Moq不像我原先认为的那样。