【问题标题】:MSBuild - Using older version of assemblyMSBuild - 使用旧版本的程序集
【发布时间】:2012-08-02 11:15:10
【问题描述】:

我有:

  • 共享功能库 [A]
  • 另一个库 [B] 参考 A [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 使用什么标准来进行此调用。

请问有人能解释一下吗?

【问题讨论】:

    标签: .net visual-studio-2010 msbuild tfsbuild


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      相关资源
      最近更新 更多