NLog 缺少方法异常
NLog Missing Method Exception
我将项目升级到 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>
任何帮助都会很棒。
当混合不兼容的版本时,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
- 您不能在一个解决方案中不使用 GAC 的情况下混合使用多个版本的 NLog,例如您的解决方案与 2 个项目一致,一个使用 NLog 4.1,另一个使用 NLog 4.2
PS:前两种情况不需要<dependentAssembly>
。
我将项目升级到 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>
任何帮助都会很棒。
当混合不兼容的版本时,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
- 您不能在一个解决方案中不使用 GAC 的情况下混合使用多个版本的 NLog,例如您的解决方案与 2 个项目一致,一个使用 NLog 4.1,另一个使用 NLog 4.2
PS:前两种情况不需要<dependentAssembly>
。