我有一个称为A.dll的组装 项目 引用称为b.dll的组件。引用B.DLL的组件对C.DLL有二进制引用。

a.dll-> b.dll-> c.dll

我已经在A.DLL设置了B的“局部”为true,并且已将“ copy local”设置为c.dll的false。

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

谢谢

有帮助吗?

解决方案

那是因为msbuild是 能够找到 c.dll。它对B项目的复制本地设置一无所知。它只是查看b.dll元数据中的.sembly指令,并看到c.dll是一种依赖性。如果它可以找到c.dll,则它将复制它。如果找不到它,那么什么也不会发生,也没有投诉。

奇怪的部分和您的解决方案是c.dll与b.dll相同的目录中存在。它是怎么到达那里的?只需阻止它复制到那里,也不会被复制到A Build Directory。否则,您期望如何运行它是非常模糊的。

其他提示

那是因为 CopyLocal 复制引用的组件 及其依赖性 到输出文件夹, 除了引用的组件或依赖关系是否存在于GAC中.

自从您设置 CopyLocal 在引用 B, , 两个都 B 及其依赖性 C 将被复制到 A即使未设置的输出文件夹 CopyLocal 在引用 C 在里面 B 项目。

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

如果你想 B 被复制到 A的输出文件夹,但不希望发生同样的事情 C, ,一种解决方案是放置 C 在GAC中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top