MSBuild - 使用旧版本的程序集

时间:2012-08-02 11:15:11

标签: .net visual-studio-2010 msbuild team-build

我有:

  • 共享功能库[A]
  • 另一个图书馆[B] 参考文献[A1]
  • 的v1

我当前的Visual Studio解决方案有:

  • 一个dll [L],(文件)引用B
  • WindowsService [S],其中(项目)引用L并且还具有对更新但向后兼容的A,[A2]版本的文件引用。

当我在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用来进行这个调用的标准是什么。

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

汤姆在teambuild工作中的msbuild的方式是所有项目的所有输出dll都放在outputdirectory中。此输出目录为解决方案中的所有项目共享。因此,如果你有相同dll的不同版本,它们将相互覆盖。

解决这个问题的方法是使用$(Outdir)\ SpecificDir项目的子目录,或者使用版​​本标签重命名dll,即A.1.0.dll和A.dll