Devenv 命令行切换错误

Posted

技术标签:

【中文标题】Devenv 命令行切换错误【英文标题】:Devenv command line switches error 【发布时间】:2015-02-20 11:49:03 【问题描述】:

我有一个简单的解决方案,其中包含类项目和设置项目(在 VS 中安装的扩展:vdproj)。

面临以下奇怪行为:

    在 VS2013 中打开解决方案 -> 开始重建 -> 没有错误。

    创建一个小批量文件:

    CALL "%VS120COMNTOOLS%vsvars32.bat"
    
    DEVENV "D:\Source\Solution.sln" /Rebuild "Debug|Any CPU" 1>NUL 2>&1
    
    IF ERRORLEVEL 1 GOTO Error
    
    IF ERRORLEVEL 0 GOTO Yeah
    
    :Error
    COLOR c
    Echo.
    Echo end %date% - %time%
    Echo Failed!
    PAUSE
    
    :Yeah
    
    Echo.
    
    PAUSE
    

    运行这个批处理文件,错误级别不为零

    现在在批处理文件中将 devenv 操作更改为以下内容:

    DEVENV "D:\Source\Solution.sln" /Clean "Debug|Any CPU" 1>NUL 2>&1
    
    
    DEVENV "D:\Source\Solution.sln" /Build "Debug|Any CPU" 1>NUL 2>&1
    

    运行这个批处理文件,错误级别为零

奇怪的是,如果没有输出重定向,我在运行重建操作激活的批处理时也不会出现任何错误。

任何建议为什么我会得到不同的行为?

【问题讨论】:

【参考方案1】:

在第一种情况下,您正在进行重建。在第二种情况下,您正在执行清理和构建。暂时去掉 1>NUL 2>&1 应该就能看到错误是怎么回事了。

您可能会简化一些事情并像这样保存结果。然后,如果需要,您可以在“按任意键继续”之前查看日志文件。

CALL "%VS120COMNTOOLS%vsvars32.bat"
SET "LogFile=%Temp%\BuildLog.txt"
IF EXIST "%LogFile%" DEL /F /Q "%LogFile%"

DEVENV "D:\Source\Solution.sln" /Rebuild "Debug|Any CPU" 1>"%LogFile%" 2>&1
IF ERRORLEVEL 1 (
   COLOR c
   Echo.
   Echo end %date% - %time%
   Echo Failed! View log file %LogFile% if you prefer. Then
)

PAUSE
IF EXIST "%LogFile%" DEL /F /Q "%LogFile%"

【讨论】:

已经进行了删除,并且绝对没有显示错误。这就是我在这里发布它的原因。将更新我的问题以突出显示这一点。 ERROR LEVEL 可能只是表明您的命令行是正确/不正确的,可能实际上并不能反映构建的结果。 在执行命令行给定操作时遇到错误时返回错误级别 0 的任何应用程序都是非常糟糕的形式。

以上是关于Devenv 命令行切换错误的主要内容,如果未能解决你的问题,请参考以下文章

通过 Devenv 命令行构建时禁用代码分析

使用devenv/MSBuild在命令行编译sln或csproj

宏和 lib 文件的 devenv 命令行选项

从命令行运行 devenv

devenv 命令行 构建环境变量/参数

Visual Studio 命令行 (devenv) 和 IDE 构建有啥区别?