我正在使用 NLog 和 Growl。它在本地运行良好。当我部署网站时,我收到以下错误:
Exception: NLog.NLogConfigurationException: Exception when parsing E:\Websites\SPECIFICATION\NLog.config. ---> System.ArgumentException: Target cannot be found: 'NLog.Targets.GrowlNotify'
但是这个 dll 确实存在于我的 bin 目录中。我通过 nuget 添加了所有必需的文件。
还有我的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<nlog xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true" throwExceptions="false" throwConfigExceptions="true" internalLogToConsole="true" internalLogLevel="Trace" internalLogFile="E:\Websites\SPECIFICATION\App_Data\log.txt" xmlns:p1="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="myvar" value="myvalue" />
<extensions>
<add assembly="NLog.Targets.GrowlNotify" />
</extensions>
<targets>
<target name="db" xsi:type="Database" connectionString="Data Source=AA;Initial Catalog=BB;User ID=SA;Password=BBBB" connectionStringName="SC" commandType="StoredProcedure" commandText="[dbo].[NLog_AddEntry_p]">
<parameter name="@machineName" layout="${machinename}" />
<parameter name="@siteName" layout="${iis-site-name}" />
<parameter name="@logged" layout="${date}" />
<parameter name="@level" layout="${level}" />
<parameter name="@username" layout="${aspnet-user-identity}" />
<parameter name="@message" layout="${message}" />
<parameter name="@logger" layout="${logger}" />
<parameter name="@properties" layout="${all-event-properties:separator=|}" />
<parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
<parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
<parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
<parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />
<parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
<parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />
<parameter name="@callSite" layout="${callsite}" />
<parameter name="@exception" layout="${exception:tostring}" />
</target>
<target name="growl" xsi:type="GrowlNotify" password="" host="192.168.1.10" port="23053"/>
</targets>
<rules>
<!-- add your logging rules here -->
<logger name="*" minlevel="Trace" writeTo="db" />
<logger name="*" minLevel="Trace" writeTo="growl" />
</rules>
</nlog>
我不确定为什么它可以在本地工作,但不能在已部署的版本上工作。他们是一样的。并且 dll 存在于两者上。有任何想法吗?
更新:
启用绑定日志记录后,我收到以下日志消息:
Assembly manager loaded from:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable c:\windows\system32\inetsrv\w3wp.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: DisplayName = NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c
(Fully-specified)
LOG: Appbase = file:///E:/Websites/SPECIFICATION/
LOG: Initial PrivatePath = E:\Websites\SPECIFICATION\bin
Calling assembly : NLog.Targets.GrowlNotify, Version=1.0.1.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\Websites\SPECIFICATION\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/specification/f65047fd/2d5397dc/NLog.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/specification/f65047fd/2d5397dc/NLog/NLog.DLL.
LOG: Attempting download of new URL file:///E:/Websites/SPECIFICATION/bin/NLog.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
这与 nuget 无法在生产服务器上下载最新软件包有关吗?但是如果错误是 NLog.dll 为什么 NLog 记录到我的数据库就好了,只有咆哮不起作用?