如何在C#项目中设置“复制本地依赖关系” [Copylocal问题
题
我有一个称为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中。
不隶属于 StackOverflow