我有:
- 共享功能库 [A]
- 另一个引用 A [A1] 的 v1 的库 [B]
我当前的 Visual Studio 解决方案有:
- A 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 使用什么标准来进行这个调用。
任何人都可以对此有所了解吗?