【问题标题】:log4net: Assembly System.Xml.XmlElement not referenced error, although not usedlog4net:Assembly System.Xml.XmlElement not referenced 错误,虽然没有使用
【发布时间】:2011-10-17 14:26:21
【问题描述】:

我在使用 log4net 时遇到了一个奇怪的编译器错误:

XmlConfigurator.Configure(new FileInfo("LogConfig.log4net")); // produces error
ILog log = LogManager.GetLogger("MyLogger");
log.Info("hello");

报告

错误 1 ​​类型“System.Xml.XmlElement”在未引用的程序集中定义。您必须添加对程序集 'System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的引用。

这发生在第一行,尽管我自己并没有真正提到任何 System.Xml 内容。此外,可能值得注意的是,我的目标是 .net 4.0,而编译器需要 .net 2.0 程序集。我最近刚刚将我的项目切换到目标 4.0。

有什么建议吗? 谢谢!

【问题讨论】:

  • 你添加了对System.Xml.dll的引用吗?

标签: c# .net compiler-errors log4net


【解决方案1】:

我怀疑问题在于您使用XmlElement 类型的参数调用具有重载 的方法。虽然我可以看到它的论点没有失败,但我认为要求引用并非完全不合理。

最简单的解决方法是添加对 System.Xml.dll 的引用——它真的不需要 .NET 2.0 版本;这只是 log4net 程序集引用的那个。

【讨论】:

  • 成功了..!使用.net 4.0,即使它要求使用强名称的 2.0 版本。我可以看到 log4net 有一点要求 System.Xml,但实际上我通过将“使用 System.Xml”添加到 no 来给编译器提供参考利用。此外,据我了解,此引用通常只能在运行时查找。奇怪..无论如何,非常感谢!
  • @Efrain:添加using System.Xml; 不会为编译器提供对程序集 的引用 - 它会添加对命名空间 的导入。两者之间存在很大差异,您需要了解这一点。 using 指令 ​​just 意味着您可以通过其简单名称引用该命名空间中的类型,并使用该命名空间中的方法中声明的扩展方法。它不会对您的程序集引用的程序集列表执行任何操作
  • 嗯.. 我知道这一点,但是如果没有先引用,就不能导入命名空间。或者,这将产生“您是否缺少指令或程序集引用?”此行的错误消息。因此,由于在顶部添加“使用 System.Xml”没有错误,我假设该引用存在。通过一些 .net/VS 魔法 - 即通常,您不需要手动添加 .net 引用。
  • @Efrain:这只是意味着 some 程序集正在为System.Xml 命名空间贡献一个类型。它可能不是同一个程序集。但是,您之前关于“我实际上通过添加 'using System.Xml' 无济于事给编译器提供了引用”的评论表明您认为添加 using 指令实际上添加了程序集引用,但它没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2018-03-15
相关资源
最近更新 更多