批处理脚本-如果成功,是否将msbuild输出转储到特定文件而不是控制台窗口?

批处理脚本-如果成功,是否将msbuild输出转储到特定文件而不是控制台窗口?,msbuild,error-handling,batch-file,command,command-prompt,Msbuild,Error Handling,Batch File,Command,Command Prompt,我不知道该怎么做。我有一个批处理脚本文件,用于执行多个msbuild调用。我不希望msbuild输出污染我的命令窗口,而是希望它转储到日志文件中。我不知道如何做到这一点,但这是我目前的脚本: @ECHO Building shared libraries ... msbuild "SharedLibraries.sln" :: Not sure how to catch an unsuccessful build here for my GOTO ERROR? :: Copy dll file

我不知道该怎么做。我有一个批处理脚本文件,用于执行多个msbuild调用。我不希望msbuild输出污染我的命令窗口,而是希望它转储到日志文件中。我不知道如何做到这一点,但这是我目前的脚本:

@ECHO Building shared libraries ...

msbuild "SharedLibraries.sln"
:: Not sure how to catch an unsuccessful build here for my GOTO ERROR?
:: Copy dll files to specific location

@ECHO Building primary application...

msbuild "Myapp.sln"
:: Not sure how to catch an unsuccessful build here for my GOTO ERROR?

:ERROR
那么,我如何:

  • 是否将msbuild输出转储到日志文件
  • 捕获不成功的生成并转到错误标签

  • 添加
    /fileLogger
    命令行开关会导致MSBuild将生成输出写入当前目录中的文件MSBuild.log,而
    /noconsolelogger
    开关会导致MSBuild不再写入标准输出。可以使用
    /flp
    开关设置文件名,如下例所示:

    msbuild "SharedLibraries.sln" /nologo /noconsolelogger /fileLogger /flp:logfile=buildlog.txt
    
    有关详细信息,请参阅

    关于你的第二个问题;如果生成失败,MSBuild将返回一个非零的退出代码,可以像往常一样进行处理:

    msbuild "SharedLibraries.sln" /nologo /noconsolelogger /fileLogger /flp:logfile=SharedLibraries.log
    if not errorlevel 0 goto ERROR
    
    msbuild "Myapp.sln" /nologo /noconsolelogger /fileLogger /flp:logfile=Myapp.txt
    if not errorlevel 0 goto ERROR
    
    :ERROR
    

    当然,好的旧输出重定向也可以将输出写入文件而不是标准输出:
    msbuild“SharedLibraries.sln”>SharedLibraries.log