【问题标题】:Add reference to assembly which in turn has a project reference添加对程序集的引用,该程序集又具有项目引用
【发布时间】:2016-01-13 08:49:05
【问题描述】:

我有解决方案 1,它有 2 个项目 -> 项目 A 和项目 B。项目 A 引用项目 B。(即项目 A 依赖于项目 B)。

我也有解决方案 2,它有多个项目。此处的项目之一引用 DLL A(从解决方案 1 的项目 A 的 bin\debug 复制到解决方案 2 中的文件夹中)。

解决方案 2 编译良好。但是在解决方案 2 的运行时,当代码尝试从依赖于 DLL B 的 DLL A 执行一些代码时,它会抛出一个异常,指出无法加载文件或程序集 DLL B。如果我添加对 DLL B 的引用,那么错误消失。

我必须引用 DLL B 还是有什么方法可以避免在解决方案 2 中引用 DLL B,因为它没有明确使用它?

【问题讨论】:

    标签: c# dll reference dependencies embed


    【解决方案1】:

    DLL B 需要位于 SLN 2 中引用 DLL A 的项目的输出目录中。您不需要在项目中显式引用 DLL B,只要它在物理上就在那里。

    DLL A 将在您运行时自动复制到同一文件夹,因为您为项目提供了对它的引用。

    假设你在调试模式下运行,那么默认情况下你的输出目录应该是:

    (your project directory)\bin\Debug
    

    【讨论】:

    • 是的,肯。在输出目录中有 DLL B 就足够了。没有必要引用它。如果 Copy to Local 设置为 true,则 DLL A 将被复制到输出目录。
    【解决方案2】:

    如果您在项目中使用任何依赖于第二个 DLL 的引用 DLL,则需要在解决方案中添加这两个 DLL。

    所以,您还需要在解决方案 2 中添加 DLL B,因为它在 DLL A 中使用。

    【讨论】:

      【解决方案3】:

      Visual Studio 的首要任务是,如果您可以访问源代码 csproj,那么最好将这些项目加载到它所依赖的每个解决方案中。业务的第二个顺序是,引用解决方案中具有项目的库的最佳方法是引用整个项目,而不是引用 dll 输出。您不必解决路径问题(调试/发布),它的工作更加顺畅,并且在编译期间可以确定,要么使用最后更新的 dll,要么在必要时编译它。

      【讨论】:

      • 谢谢 ipavlu。我确实可以控制来源,但我想将解决方案 1 分开,因为它是一个更通用的库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多