重复 - 这个确切的问题被问到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的依赖关系,这是正确的吗?我猜也可以使用自定义构建步骤。无论如何,这种行为是否有任何优点/意义?)
答案 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)
我已多次执行相同的过程,无需手动重新引用装配。一种简单的测试方法是:
如果构建成功完成,则所有内容都被引用为OK。
答案 2 :(得分:0)
如果Lib.dll是一个interop dll,那么它的底层dll将不会被复制。除此之外,我说可能存在操作符错误,因为您肯定不需要手动引用依赖的托管程序集。