使用 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
我得到一个 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" />
我已经搜索了基础 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 的问题,就像我最初认为的那样。
我有一个基础摘要 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
我得到一个 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" />
我已经搜索了基础 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 的问题,就像我最初认为的那样。