Visual Studio递归复制本地

时间:2009-06-12 20:36:19

标签: visual-studio deployment reference

重复 - 这个确切的问题被问到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的依赖关系,这是正确的吗?我猜也可以使用自定义构建步骤。无论如何,这种行为是否有任何优点/意义?)

3 个答案:

答案 0 :(得分:5)

这仅适用于.dll实际引用程序集的情况。即如果你有LibInterface.dll和LibImplementation.dll - 并且你的代码只引用了LibInterface.dll中的类,则无法将LibImplentation.dll放入B的输出中(干净利落)。

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

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

答案 1 :(得分:0)

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

  1. A中的参考B
  2. 从A中的B创建对象的实例。
  3. 编译。
  4. 如果构建成功完成,则所有内容都被引用为OK。

答案 2 :(得分:0)

如果Lib.dll是一个interop dll,那么它的底层dll将不会被复制。除此之外,我说可能存在操作符错误,因为您肯定不需要手动引用依赖的托管程序集。