我有一个类库项目,我们称之为CoreLib。 CoreLib有两个对第三方DLL文件1.dll和2.dll
的引用因为我非常喜欢可重用性,所以我希望能够在尽可能多的地方使用CoreLib。
因此,如果我有一个名为BigProjectA的项目和另一个名为BigProjectB的项目,并且他们需要利用CoreLib提供的功能,我所要做的就是在这些项目中添加对CoreLib的引用(BigProjectA和BigProjectB)。
这很好,除非我将输出文件夹(bin目录)复制到另一个人的计算机上,我不能保证他们的机器上有1.dll和2.dll。
为此,我只为CoreLib项目中的1.dll和2.dll引用设置了Copy Local to True。
构建CoreLib项目时,我可以看到1.dll,2.dll和CoreLib.dll文件。那是完美的!
但是在引用CoreLib的项目中,只复制了CoreLib.dll,而不是1.dll和2.dll。
我错过了什么吗?将Local set复制为True,但仅复制CoreLib项目的副本。所以即使它们在同一个解决方案中,并且我将CoreLib作为项目引用添加到其他项目中,我仍然没有看到1.dll和2.dll复制到其他bin / Debug,bin / Release文件夹其他项目(BigProjectA和BigProjectB)。
有一个简单的解决方案吗?
答案 0 :(得分:0)
简单的解决方案是:
在第一个场景中,编译器不会自动输出CoreData的依赖项。如果将CoreData项目添加到解决方案中,则会输出其依赖项 。因此,要将CoreData用作二进制引用,还必须引用其依赖项。
答案 1 :(得分:0)
没有错。在项目BigProjectA
和BigProjectB
中,您只引用了CoreLib
,因此他们“关心”只应对它,因为他们对它的依赖关系没有任何线索。您可以采取哪些措施来解决这类问题,例如在BigProject..
中添加PostBuildVEent以复制CoreLib
依赖项。
或者,如果可以的话,添加对CoreLib
项目的引用。
另一种解决方案是将DI视为一种技术,以避免引用的强耦合。因此,如果在BigProjectA
或B
中您不关心CoreLib
中第三方库提供的功能,那么您应该只需复制CoreLib
即可。
答案 2 :(得分:0)
好的答案家伙......但实际上我最终只使用了ILMerge。看起来比较安全/不那么烦人。
谢谢你