如何在C#项目中设置“复制本地依赖项”[CopyLocal的问题]

时间:2011-01-17 11:19:16

标签: c# msbuild reference csproj

我有一个名为A.dll的程序集,它有一个名为B.dll的程序集的项目引用。引用B.dll的程序集具有对C.dll的二进制引用。

A.dll - > B.dll - > C.dll

我已将A.dll的B的“Copy Local”设置为true,并且我已将B.dll的“Copy Local”设置为C.dll的false。

无论如何,当我构建A.dll时,我在结果文件夹中以C.dll结尾。为什么不考虑B.dll的“复制本地”值到C.dll?

由于

2 个答案:

答案 0 :(得分:4)

那是因为msbuild 能够找到 c.dll。它对B项目的复制本地设置一无所知。它只是查看b.dll元数据中的.assembly指令,并发现c.dll是一个依赖项。如果它能找到c.dll那么它会复制它。如果找不到,那么没有任何反应,也没有投诉。

奇怪的部分和您的解决方案是c.dll与b.dll存在于同一目录中。它是怎么到达那里的?只是阻止它被复制到那里,它也不会被复制到A build目录。如果您期望这种情况发生,那么它是非常模糊的。

答案 1 :(得分:3)

这是因为CopyLocal将引用的程序集及其依赖项复制到输出文件夹,除非引用的程序集或依赖项驻留在GAC中

由于您在引用的CopyLocal上设置了B,因此B及其依赖项C都将被复制到A的输出文件夹中,即使您未在CopyLocal项目中引用的C上设置B

请注意,如果您构建BC 已复制到B的输出文件夹。

如果您希望将B复制到A的输出文件夹,但又不希望C发生同样的情况,那么一个解决方案就是C在GAC中。