Исключение отсутствующего метода NLog - PullRequest
0 голосов
/ 11 апреля 2019

Я обновил свой проект до dotnetcore 2.1. После этого, когда я пытаюсь его запустить, я получаю System.MissingMethodException

Ошибка в деталях:

'Method not found: 'NLog.LogFactory NLog.LogManager.LoadConfiguration(System.String)'.'

Я уже пытался понизить NLog, но он не работал и на него влияли другие зависимости.

Вот мой файл web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="false">
      <environmentVariables />
    </aspNetCore>
  </system.webServer>
</configuration>

Вот мой файл NLog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="c:\temp\internal-IEPAPI-nlog.txt">

  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <!--target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
                 layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" /-->


    <target xsi:type="File" name="InvoiceEngineProcessApiLogFile" fileName="D:\Logs\BillingEngine\ProcessApis\InvoiceEngine-${shortdate}.log"
             layout="${longdate}|TraceId=${aspnet-traceidentifier}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception:format = ToString,StackTrace}${newline}" />

    <target xsi:type="Null" name="blackhole" />
  </targets>

  <rules>
    <!--All logs, including from Microsoft-->
    <!--logger name="*" minlevel="Trace" writeTo="allfile" /-->

    <!--Skip Microsoft logs and so log only own logs-->
    <!--<logger name="Microsoft.*" minlevel="Trace" writeTo="InvoiceEngineProcessApiLogFile" />-->
    <logger name="*" minlevel="Trace" writeTo="InvoiceEngineProcessApiLogFile" >
      <filters>
        <when condition="(LogLevel.Debug >= level) and equals('${var:debugLoggingEnabled}', '0')" action="Ignore" />
      </filters>
    </logger>
  </rules>
</nlog>

Любая помощь будет отличной.

1 Ответ

0 голосов
/ 12 апреля 2019

Отсутствует исключение метода в NLog при смешивании несовместимых версий, например несколько версий NLog в одном проекте (если GAC не используется) или смешивание основных версий (v3 и v4).

NLog использует семантическое управление версиями (см. https://semver.org/),, что означает:

  • Вы можете без проблем перейти на новую минорную версию (например, с 4.1 до 4.6).
  • Вы можете использовать компоненты, которые привязаны к более старой минорной версии, и использовать в своем приложении более новую минорную версию. Например. компонент построен на NLog 4.1, а ваше приложение использует NLog 4.6
  • Вы не можете использовать более старую версию, чем ваш компонент, например компонент построен на NLog 4.1, а ваше приложение использует NLog 4.0
  • Вы не можете смешивать несколько версий NLog без использования GAC в одном решении, например, ваше решение соответствует 2 проектам, один из которых использует NLog 4.1, а другой - NLog 4.2

PS: в первых двух случаях <dependentAssembly> не требуется.

...