【问题标题】:.dll reference Vs. project reference.dll 参考项目参考
【发布时间】:2014-09-15 15:20:48
【问题描述】:

我有一个项目(项目 B),它引用了另一个项目(项目 C),并使用了该项目中的一些方法。 现在,我有第三个项目(项目 A),它只需要使用项目 B 的方法(这些方法使用项目 A 的方法)——项目 A 使用项目 C,但不直接使用。

  1. 我需要添加对项目 C 的引用还是只添加对项目 B 的引用?
  2. 如果我要添加 .dll 引用,我可以只添加对项目 B 的引用吗?

【问题讨论】:

  • 不,你不需要引用它
  • "I have a third project (project A) which needs to use only project B methods (and these methods use project A methods)" - 所以你有一个循环引用?这听起来不太好......

标签: c# visual-studio-2012


【解决方案1】:
  1. 我需要添加对项目 C 的引用还是只添加对项目 B 的引用?

只要 B 就足够了。如果您在 Visual Studio 中添加项目引用,添加 B 的项目引用就足够了。在编译时,两个项目(B和C)的dll都将被复制到A的可执行路径

  1. 如果我要添加 .dll 引用,我可以只添加对项目 B 的引用吗?

在这种情况下,您只需要添加对项目B dll 的引用,但项目C 的dll 也应该在可执行文件夹中,因为项目B 依赖于它。

在这两种情况下,您都不必显式引用项目 C,因为不会从项目 A 直接调用项目 C。但请记住,在这两种情况下,您最终都会在项目 A 可执行文件中使用项目 C dll .

你可能会看到:Managing Project References - MSDN

看到@David 的comment,您的项目中不能有循环引用。项目 A 使用项目 B 的方法,项目 B 使用项目 A 的方法,您将无法编译此代码。您需要重新设计代码并在项目中具有层次结构,例如 A -> B -> C

见:Why are circular references in Visual Studio a bad practice?

【讨论】:

    【解决方案2】:

    您很可能需要两者,因为B 依赖于C。如果有一个方法签名暴露了C 的类型,你肯定需要引用来编译它。否则,您可能会在运行时需要它。

    如果可能,请始终将其添加为引用,因为 IntelliSense 会注意到项目引用并会在您编译之前注意到方法更改。

    【讨论】:

    • 什么意思?一个程序集就是一个程序集。通过文件或项目引用引用,仍然引用同一个dll文件。
    • 引用项目而不是编译后的 DLL 的优点是您可以调试单步执行引用的库,而不是被对象或类资源管理器阻止。
    • 没有项目参考也是可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多