C#程序中未加载程序集

4
我有一个项目Common,其中包含一个log4net自定义appender。我在所有其他项目中引用该项目,并在app.config中配置log4net appender。一切都很顺利,只有一个项目在尝试实例化Appender时失败。
输出显示以下错误:
System.TypeLoadException: 无法加载类型[Common.Appenders.MyCustomAppender]。
尝试装配[log4net, Version=1.2.11.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a]和所有已装载的程序集
at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net: ERROR找不到名为[MyCustomAppender]的Appender。
log4net配置对于所有项目都是相同的。app.config包含:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="MyCustomAppender" type="Common.Appenders.MyCustomAppender">
      <file value="log.txt" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="MyCustomAppender" />
    </root>
  </log4net>
</configuration>

我通过代码调用 log4net.Config.XmlConfigurator.Configure()。如果在调用log4net之前使用 Assembly.Load("Common") 手动加载程序集,则一切正常。

有什么想法,为什么当通过反射实例化MyCustomAppender时程序集未被加载?我该如何解决这个问题?


该通用项目在构建过程中是否标记为本地复制? - Rick Hodder
@RickHodder 是的,它是这样的,所有必需的dll都已经就位。 - Dan Dinu
1
在 .config 文件中没有任何内容可以帮助 log4net 弄清楚它需要自己加载一个名为“Common”的程序集。类型的命名空间名称并不重要,所以它无法正常工作。尝试像上面的“type”属性一样添加 , Common。我个人很快就厌倦了没有调试器的 xml 编程语言,并且只是在代码中进行配置。 - Hans Passant
1个回答

15

Rick,不幸的是不是这个问题:(。但与我的机器有关...它在另一台机器上运行...所以不知道发生了什么。 - Dan Dinu
2
这解决了我遇到的同样问题。希望这能被接受为解决方案。 - tralmix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接