【问题标题】:Visual Studio / MSBUILD does not update .lib files when sources are updated更新源时,Visual Studio / MSBUILD 不会更新 .lib 文件
【发布时间】:2013-01-29 13:09:49
【问题描述】:

我有一个带有库项目的 Visual Studio 解决方案,我们称之为 libFoo,还有一个可执行项目 - 我们称之为 Bar,这取决于 libFoo

例如,当我更改 libFoo/bar.cpp 并尝试构建 libFoo 时,Visual Studio 会编译我的 bar.cpp 文件,但不会重新生成库 libFoo.lib,说它已经是最新的.

我检查了系统时钟。我还验证了bar.obj文件的修改时间实际上是更新的,并且库比obj旧。但它仍然没有重新创建库。

实际的解决方案实际上包含大约 100 个项目,其中一些是库,一些是可执行文件。问题发生在我的 3 名团队成员的计算机上。其余不受影响。我们不知道为什么会发生这种情况,以及如何解决它……或者其他团队成员可能会发生这种情况。

我无法通过使用库和依赖于它的可执行文件创建自己的小型解决方案来重新生成它。所以我相信这是环境问题和我们的解决方案/项目文件问题的某种组合。

谢谢, 亚历克斯。

编辑

该解决方案是在 Visual Studio 2010 上创建的,过去几年在 VS2010 上开发,直到我们开始使用 VS2012。安装了 VS2010 和 VS2012 的用户会出现此问题。解决方案现在是VS2012解决方案,项目使用VS2010平台工具包。

当我们开始使用 VS2012 时,我们的团队迁移了解决方案,但我们将所有 C++ 项目的“平台工具包”保留为 VS2010,以便我们的代码与仍在使用 VS2010 的其他团队兼容。

Google 没有透露任何可行的解决方案。虽然它确实揭示了其他人也遇到过类似问题的事实。

【问题讨论】:

  • 可能有点牵强,但您的 .lib 文件是否以某种方式在源代码控制中,因此是只读的?
  • 您是否区分了项目/解决方案文件的适用对象和损坏对象?
  • 是一样的。当我们从源代码管理中获得一个干净的副本时,就会发生这种情况。
  • libFoo 是静态库吗?我想确认您不是指使用 dll 项目创建的 .lib
  • 每个人都有相同的安装级别(即 Visual Studio Service Packs)。另外,您的系统上是否有任何其他版本的 VS。如果是这样,它们是否按照发布的顺序安装。我在无序安装版本时看到了错误的 msbuild 行为。

标签: visual-studio-2010 msbuild


【解决方案1】:

看来我们遇到了和this问题的人一样的问题。 Microsoft Connect 上还有一个bug report

简而言之 - 我们的中间文件夹与我们的 %temp% 文件夹在某些配置上相同。我们通过修改所有 Visual C++ 项目的中间文件夹解决了这个问题。

【讨论】:

    【解决方案2】:

    确保“General\Target Name”和“Librarian\Output File”的项目属性匹配,并且它们与所有配置匹配。 也值得在“Librarian\Command Line”页面上检查上述内容。

    【讨论】:

    • 它们不匹配。目标名称为$(ProjectName),输出名称为$(OutDir)$(ProjectName).lib 目标名称可以是全路径吗?
    • 嗯.. 我查过了。他们确实匹配。目标名称是 $(ProjectName),扩展名是 .lib。在图书管理员设置中,输出路径是 $(OutDir)$(ProjectName).lib
    • 我唯一可以建议的另一件事是从工作和非工作构建中区分日志(和 *.tlog)文件。
    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多