【问题标题】:Visual studio recursive Copy localVisual Studio 递归复制本地
【发布时间】:2010-11-02 14:24:24
【问题描述】:

重复 - 有人问过这个确切的问题 here - 唯一的解决方案似乎是构建后事件。

在 Visual Studio 2008 中,我有以下项目:

  • A - 参考 B

  • B - 引用 Lib.dll

编译B时,Lib.dll出现在B/bin/Debug中。 (没关系)

构建A时,B.dll出现在A/bin/Debug中,而Lib.dll不出现在A/bin/Debug中。

将所有 B 的依赖项也复制到 A 的输出路径不是合乎逻辑的行为吗,因为 B 在运行时需要这些程序集?

所有引用都有 copylocal = true。


(现在我必须手动从 A 引用 B 的所有依赖项,对吗?我猜我也可以使用自定义构建步骤。无论如何,这种行为有什么优势/意义吗?)

【问题讨论】:

标签: visual-studio deployment reference


【解决方案1】:

这仅在程序集实际被 .dll 引用时才有效。即,如果您有 LibInterface.dll 和 LibImplementation.dll -并且您在 A 中的代码仅引用 LibInterface.dll 中的类,则无法将 LibImplentation.dll 放入 B 的输出中(干净)。

这也适用于任何任意文件 - 即,如果您有与项目 A 相关的 Randon.myFile,这将是所需的过程: 1.添加为本地副本,或将事件构建到项目A(因此出现在项目A的输出中) 2. 在项目 B 中,在项目 A ref 上设置“复制本地”。 3. 然后,您应该在项目 B 的项目 A 的输出中获取所有内容(包括您的文件) - 但您没有。

可能还有其他选项 - “复制本地 - 全部”或其他内容。这将有助于 VS 支持 IOC 技术和清晰的抽象。

【讨论】:

    【解决方案2】:

    我已多次执行相同的程序,无需手动重新引用程序集。一种简单的测试方法是:

    1. 在 A 中引用 B
    2. 在 A 中从 B 创建一个对象的实例。
    3. 编译。

    如果构建成功完成,一切都被引用了。

    【讨论】:

    • 构建成功完成,但在运行时来自 B 的对象在 A 中的实例化以异常“无法加载类型或程序集”结束,因为来自 B 的对象使用来自 Lib.dll 的对象,即不在 GAC 或当前文件夹中。
    • ...也有同样的问题。似乎它与版本信息有关,即使特定版本设置为 false
    【解决方案3】:

    如果 Lib.dll 是互操作 dll,则不会复制其底层 dll。除此之外,我会说可能存在操作员错误,因为您绝对不需要手动引用依赖的托管程序集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多