nlog无法从引用的程序集加载自定义目标

时间:2011-06-10 14:08:19

标签: .net nlog targets

我创建了以下自定义目标:

[Target("MyTarget")
public class MyTarget : TargetWithLayout

这个类在它自己的程序集中定义,让我们说MyTargets.dll(不是真名)。 NLog.config文件包含以下行

<extensions>
    <add assembly="MyTargets, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</extensions>

目标已定义为使用此新类型:

<target name="myTarget" xsi:type="MyTarget" />

已定义记录器以使用此目标(省略)。

如果我引用目标程序集项目,我的应用程序将成功加载配置。如果我尝试引用输出DLL,它将无法加载。如果我以编程方式从程序集添加目标(bin引用而不是项目),那么它可以正常工作。

DLL似乎位于正确的位置,即bin目录。该类型必须存在,因为我可以在代码中引用类型,但在尝试引用代码中的类型时似乎会​​失败。

为什么不在代码中执行此操作?那么它是我正在构建的nuget包的一部分,我想要一个标准配置文件分发给这个代码库的所有使用者。

非常感谢任何建议/想法

1 个答案:

答案 0 :(得分:3)

原来我是个白痴。

由于无关的原因,我决定将NLog.config文件复制到构建时的bin目录,同时将原始文件保留在根项目级别。这在NLog中造成了某种冲突。

当我从bin目录中删除配置文件时,会正确加载根级别的配置文件,并且我的自定义目标会被找到。如果我从项目根级别删除配置文件并将其放在bin目录中(即与包含自定义目标的程序集相同的级别),则加载的配置文件将无法找到自定义目标。

所以回顾一下,我停止将配置文件放在bin目录中并将其保留在定义它的位置(项目根级别)