代码之家  ›  专栏  ›  技术社区  ›  httpNick

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

  •  0
  • httpNick  · 技术社区  · 9 年前

    我有一个基本抽象类,它存在于我正在为其实现具体类的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
    

    我得到一个 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的引用或用法。我 searched Castle.Core 's repo and found many usages of serilog 我认为这是一个日志库。因此,我对这个异常是如何发生的,以及如何尝试解决它,以便在模拟对象时不会抛出异常感到有点困惑。

    1 回复  |  直到 9 年前
        1
  •  0
  •   httpNick    9 年前

    经过仔细研究,我找到了问题的原因。它实际上与城堡或莫克无关。它实际上是由Metrics引起的。NET中引用的nuget包 MyBaseAbstractClass<T>

    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系列 在这些包中仍然找不到,但我删除了抛出异常的行,因为它无论如何都是未使用的,并且还删除了 公制.NET

    推荐文章