【问题标题】:Visual studio 2013 project reference another project with external librariesVisual Studio 2013 项目引用另一个带有外部库的项目
【发布时间】:2014-03-21 01:52:11
【问题描述】:

我有一个问题,不知道最好的步骤是什么。

我的问题是以下一个:我在 VS13 中创建了不同的项目。其中之一是 Log 项目(使用 NuGet 安装的外部库 Log4net)。

现在我想在其他项目中使用该项目...但每次我引用该项目时都会收到以下错误:

错误 29 类型“log4net.ILog”在未引用的程序集中定义。您必须添加对程序集 'log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a' 的引用。

知道如何解决这个问题吗?

提前致谢。

【问题讨论】:

    标签: c# .net reference visual-studio-2013


    【解决方案1】:

    这通常发生在使用 log4net 的程序集还公开 log4net 的类型时。在这种情况下,消费程序集需要两个程序集的引用。使用 log4net 的程序集和对 log4net 的引用也是如此。

    您需要添加对 log4net 的引用或完全抽象出类型,以便您的程序集在内部处理 log4net 类型。

    例如如果我有一个具有 2 种方法的项目 LogHelper:

    Log(MyOwnLogType my) 和 Log(log4net.ILog log)。

    调用者可能只使用 Log(MyOwnLogType) 但仍需要从整体角度解析 log4net.ILog 的类型。因此,请确保是否有任何此类类型通过您的辅助程序集泄漏到调用者中。

    【讨论】:

    • 我有这个:public readonly ILog L = LogManager.GetLogger(typeof(Logger)); ...删除这个,解决了你解释的问题。实体框架也会出现这个问题吗?因为现在我必须在两个项目中添加实体框架 dll(这是另一个项目)...
    • 可能。寻找在 EF 中暴露的类似类型。或在单独的问题中发布更多代码,我们也可以查看它。
    • 我的问题和这个stackoverflow.com/questions/19459843/…一模一样
    • 这个问题也可能是由 log4net.dll 的 dll 版本不匹配引起的。例如,如果您有两个单独的项目,一个引用 log4netV 1.2.10.0,另一个引用 1.2.15.0。检查您的版本是否匹配。
    【解决方案2】:

    听起来引用 log4net 的项目在public / internal API 中公开了它的一种类型。为了引用这个项目,新项目必须能够解析这些类型的令牌,因此也需要对 log4net 的引用。

    要解决这个问题,只需使用 NuGet 将 log4net 的引用(当然是匹配的版本)添加到新项目中。

    【讨论】:

    • 谢谢。我现在理解得更好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多