我有:
我当前的Visual Studio解决方案有:
当我在Visual Studio中构建解决方案时,一切正常。 S的bin文件夹包含L,B和A2(与B兼容,效果很好)。
但是,如果我使用MSBuild(通过TeamBuild)构建,最终的构建文件夹最终会以L,B和A1结束。 A1不具备S所需的库A的新功能,因此当您尝试运行时,S会失效。
我已经阅读了一些建议,它与MSBuild忽略.sln的构建顺序有关。
我发现L的bin目录包含B和A1,正如我所期望的那样,因为其中没有任何东西对A2有任何引用。因此,当MSBuild构建了L(本地拉入B和A1)和S(拉入L和A2)时,它必须将所有二进制文件合并到构建的最终输出中。我不明白是什么让它选择A1(来自L bin)而不是A2(来自S bin)?
我很欣赏没有什么可以反过来的,但是我不知道MSBuild用来进行这个调用的标准是什么。
有人可以对此有所了解吗?
答案 0 :(得分:0)
汤姆在teambuild工作中的msbuild的方式是所有项目的所有输出dll都放在outputdirectory中。此输出目录为解决方案中的所有项目共享。因此,如果你有相同dll的不同版本,它们将相互覆盖。
解决这个问题的方法是使用$(Outdir)\ SpecificDir项目的子目录,或者使用版本标签重命名dll,即A.1.0.dll和A.dll