首页 > 解决方案 > Serilog 文件接收器 - System.MissingMethodException:找不到方法:Serilog.LoggerConfiguration

问题描述

当我尝试使用文件接收器时,我收到了 MissingMethodException。

            Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.File(logFilePath, rollingInterval: RollingInterval.Day, shared: true)
                .CreateLogger();

这真的很奇怪,因为我以前用相同的设置使用过它,它从来没有出现任何问题,但我确定这是导致错误的原因,因为如果我去掉 .WriteTo.File() 行,我不会'得到错误。

这是我的packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="ModPlus.Revit.API.2020" version="1.0.0" targetFramework="net472" />
  <package id="Serilog" version="2.9.0" targetFramework="net472" />
  <package id="Serilog.Sinks.File" version="4.1.0" targetFramework="net472" />
</packages>

你能想出发生这种情况的原因吗?
我见过类似的问题,通常是由于程序集文件中的版本不匹配,但我检查并引用了正确的版本(至少在我的packages.config中可以看到)

编辑: 这是完整的未处理异常 未处理的异常

编辑 2: 调用 Serilog 的代码是 Revit(3D 建模软件)的插件,我只是尝试在 2 个不同版本的平台中运行此插件:

两个版本的软件都使用同一个版本的.NET Framework, 4.7.2
这是否提供了更多线索?在一个版本中可能出了什么问题,而在另一个版本中却没有?

标签: c#serilogrollingfilesink

解决方案


此错误表明您以某种方式Serilog.Sinks.File.dll在输出文件夹中获得了旧版本,这不是您通过 NuGet 安装的版本。

打开您的.csproj文件并检查所有引用Serilog.Sinks.File.dll并确保您只有一个引用,并且它指向正确的 nuget 包文件夹(4.1.0)。

它应该看起来像:

  <ItemGroup>
    <Reference Include="Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
      <HintPath>..\packages\Serilog.2.9.0\lib\net46\Serilog.dll</HintPath>
    </Reference>
    <Reference Include="Serilog.Sinks.File, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
      <HintPath>..\packages\Serilog.Sinks.File.4.1.0\lib\net45\Serilog.Sinks.File.dll</HintPath>
    </Reference>
  </ItemGroup>

您还可以使用dotPeek之类的工具来检查输出文件夹中的程序集并确认您是否拥有正确的程序集。


此外,虽然我认为它与这个特定错误无关,但请确保您在项目属性中启用了自动生成绑定重定向,以便Serilog.Sinks.File对 Serilog 2.5.0 的引用重定向到 Serilog 2.9.0。

绑定重定向


推荐阅读