【问题标题】:visual studio 2017: open AND build solution from a command line callvisual studio 2017:从命令行调用打开并构建解决方案
【发布时间】:2018-06-11 20:10:42
【问题描述】:

在 Visual Studio 2017(或可能任何版本)中,我想在 IDE 中打开一个解决方案并从命令行开始构建它。如果解决方案已经打开,那么我只希望它开始构建(在 IDE 中)。

所以我可以这样打开解决方案:

devenv solution.sln

或者我可以这样构建它:

devenv /build solution.sln

还有这个:

devenv solution.sln /command ...

但是关于“命令”的文档很难找到......这个例子是一些用户制作的宏,但我假设还有其他内置命令? - 这可能有帮助...?

但我不确定如何:

  • 在 IDE 中打开一个解决方案并立即构建它
  • 如果它已经打开,就让它开始构建。

有没有办法做到这一点?

我的用例是在 IBM Rhapsody 中启动构建。在 MSVS2012 中,它支持执行这些任务的 Rhapsody 插件......但插件自 2013 年以来已被弃用,因此我可以通过重写其 make 文件内容让 Rhapsody 做我想做的事 - makefile 只会调用一个批处理文件脚本将执行我在这个问题中尝试执行的命令 - 然后 Rhapsody 插件完成:)

【问题讨论】:

  • 你为什么不使用 msbuild
  • @DavidHeffernan 因为这不适合我的用例 - 这是从 Rhapsody 中打开我的解决方案...
  • 嗯,我不太明白。你想让 devenv 来驱动 msbuild,但是直接去 msbuild 是没有好处的。
  • @DavidHeffernan 我希望它在 Visual Studio 中打开我的解决方案并运行构建(例如devenv /build my_solution.sln)。这可行,但是当我再次运行脚本时,它会打开另一个 Visual Studio 实例——我只是希望它使用当前实例重新构建(我试图在我的问题的第 1 段中解释这一点)——这有意义吗? ,我可以试着画个框图什么的……如果不清楚,请见谅
  • 我只是不明白你为什么觉得目标是驱动 Visual Studio。我认为目标是编译您的代码。我想我错了。

标签: windows visual-studio command-line visual-studio-2017


【解决方案1】:

其实注意:

  1. devenv solution.sln 仅在新的 VS IDE 实例中打开解决方案。
  2. devenv /build solution.sln 仅构建自上次构建以来已更改的项目,而无需打开 VS IDE。要在解决方案中构建所有项目,请改用 /rebuild。

所以,如果你想

在 IDE 中打开一个解决方案并立即构建它

你应该连续运行这两个命令:

devenv solution.sln  
devenv /rebuild solution.sln

然后在第二次使用 /rebuild 来避免打开一个新的 VS 实例。

更新:您可以使 .cmd.bat 文件包含以下内容:

tasklist /fi "imagename eq devenv.exe" /v | find /i "solution" 2>NUL
    if "%ERRORLEVEL%"=="0" goto solution_is_running
    if "%ERRORLEVEL%"=="1" goto solution_is_closed

:solution_is_running
devenv /rebuild solution.sln
goto:eof

:solution_is_closed
devenv solution.sln
devenv /rebuild solution.sln
goto:eof

或使用:

Taskkill /IM devenv.exe /F
devenv solution.sln  
devenv /rebuild solution.sln

【讨论】:

  • 大声笑....不,我的问题包含问题:) ...我可以将两个命令串在一起,这很容易。虽然我真的希望项目在 IDE 中构建。但是不太容易的是我如何确定解决方案是否已经打开,以便我不会重新打开它?我可以查找 devenv.exe,但我可能打开了多个解决方案 - 哪一个是我想要的(如果有的话)? taskkill 也是一个有趣但最终非常糟糕的想法。如果我完成了大量尚未保存的工作怎么办...繁荣,taskkill!...哦,我的工作在哪里?
  • hmmm.... 告诉你 - 这看起来好多了,我会在星期一试试这个。我知道赏金明天就结束了,但别担心,如果赏金结束并且你的解决方案有效,我会重新做它并给它:)
  • 是的,因为 /v 开关为我提供了窗口标题,我可以从中确定打开了哪个项目 - 我可以从那里获取它!非常感谢,很好的发现 :)跨度>
猜你喜欢
  • 2012-01-03
  • 2018-10-17
  • 2015-07-31
  • 2011-04-22
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
相关资源
最近更新 更多