说我有四个项目:
A 乙 C D
使得A引用B,B引用C和C引用D。
在Visual Studio(2017)中,建筑物A也按预期触发了B,C,D中的建筑物。它只会构建一次。但是,似乎该版本将DLL复制到每个项目的bin目录中,而目录结构(假设以Debug模式构建)看起来像这样:
A -> 箱子 ->调试 -> A.exe,B.exe,C.exe,D.exe
B -> 箱子 ->调试 -> B.exe,C.exe,D.exe
C -> 箱子 ->调试 -> C.exe,D.exe
D -> 箱子 ->调试 -> D.exe
这似乎意味着存在一个O(n ^ 2),其中n是项目的数量(并且它们互相引用)就复制的可执行文件/ dll的数量而言 。这导致构建时间与项目数量的严重缩放。但是,拥有更多项目对于增加文件的粒度非常必要。
在最坏的情况下,对于n个项目,使用(1 + 2 .. + n)=(n(n + 1))/ 2公式,添加另一个项目会导致(n + 1)个额外的文件副本。
Visual Studio为什么要这样做?为什么不只复制到A的bin目录?我对当前方法的唯一好处是可以在B,C和D的bin文件夹中运行DLL / EXE。
答案 0 :(得分:0)
看起来像这样的行为可以被关闭。此名称是Visual Studio中的copylocal属性。如果您将其关闭,那么您现在将负责将DLL手动复制到输出文件夹(例如,通过自定义MSBuild步骤)。
这些问题处理得很好:
What is the best practice for "Copy Local" and with project references?