【问题标题】:Why does command line devenv and Visual Studio GUI not build the solution the same?为什么命令行 devenv 和 Visual Studio GUI 构建的解决方案不同?
【发布时间】:2020-02-21 15:23:20
【问题描述】:

我的应用程序有一个名为 MainWindow.vs2015.sln 的解决方案。这有近 100 个项目,它在 Visual Studio 2015 中完美构建。当我使用 devenv 从命令行构建解决方案时,它也可以完美运行并且没有错误。

但是,当我从命令行构建,然后打开 Visual Studio 2015 并再次构建它时,我期望我已经从命令行构建了几乎即时的构建,它重新构建了整个东西,我在那里坐了将近 30 分钟,等待重新构建一些东西。

devenv 命令和 Visual Studio 构建之间有什么区别吗?

PS 我也有 MSBuild 和 devenv 并且遇到了同样的问题。

devenv MainWindow.vs2015.sln /Build "Debug ALL"

【问题讨论】:

  • 我猜这个问题可能与您在命令行和VS中构建时使用的配置+平台有关,您是否在相同的设置中构建它?
  • 它还取决于项目和 VS(例如 ReSharper)中的工具和自定义 - VS 还执行设计时构建以在加载项目时提供给 IntelliSense。如果您使用当前版本的 Visual Studio (2019),由于架构发生变化,解决方案加载速度应该会快得多。
  • 嗨,法兹,这个问题有什么更新吗?请检查我的回答是否有助于解决此问题,如果它仍然阻止您,请随时让我知道并在这里分享更多详细信息:)

标签: visual-studio msbuild devenv


【解决方案1】:

您的项目类型是什么? VB.net、C# 还是 C++?

对于.net 项目:

如果我们在命令行中创建一个新的 VS2015 C# 项目,请在 Debug+x64 组合中构建它。之后在 IDE 中打开项目并构建它时,它会显示 Up-To-Date,并且不会再次编译和构建,因为没有任何变化。

因此,如果您在 C# 项目中遇到 build twice 问题,请在 VS 中将 Build Output verbosity 设置为 Detailed 或更高,以查看有关构建过程的详细信息。

之后,当您再次遇到此问题时,请尝试阅读日志的第一部分,以了解 VS 再次构建它的原因!检查您是否有一些文件丢失或设置为 Copy Always like this。

对于C++ 项目:

如果您的解决方案包含许多 C++ 项目。恐怕答案可能是否定的。我在 VS2015 C++ 项目中对其进行了测试,我可以重现同样的问题。我发现如果我们创建一个 C++ 项目,在命令行中构建它,然后在 VS 中构建它。 VS 会认为它不是最新的并尝试重新构建它...

有趣的是,如果我们不通过命令行构建它,而是在 VS 中构建它两次,VS 可以识别它是最新的,并且不会浪费时间进行第二次构建。

所以我建议您在构建 VS 之前避免在命令行中构建它。因为在不对源文件进行实际修改的情况下,我们使用两种方式构建项目没有任何优势。此外,由于 C++ 项目的 VS 中的 Up-To-Date 检查有一些可以改进的地方,您可以在 DC 中发布feature request,您可以从那里的产品团队获得帮助。

另外:请确保您在命令行中构建解决方案所使用的配置+平台与您在 VS IDE 中构建时使用的相同。

希望对你有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-31
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多