Visual Studio 2010输出面板不更新后构建输出

时间:2010-09-27 01:33:24

标签: visual-studio-2010

我刚刚从VS2008升级到VS2010。因为我做了很多远程调试(通过VPN),所以我使用Post-Build事件在运行之前将已编译的二进制文件和PDB复制到目标机器。我这样做是通过调用一个批处理文件(其中包括)执行Robocopy。

在VS2008中,输出面板将实时显示robocopy的输出,即:

5>          Newer             421376    RadarController.pdb
5>    0%  
5>   14%  
5>   29%  
5>   43%  
5>   58%  
5>   72%  
...

但是,在VS2010中,不是一点一点地显示Post-Build事件的进度,而是直接锁定直到整个事件完成 - 然后输出全部出现。当通过缓慢的网络连接进行复制时,这是一个特殊问题,因为我不知道一次可能发生几分钟的情况。没有办法猜测副本是否会持续5秒或5分钟;如果我还不熟悉编译器事件的顺序,我甚至不知道它是复制。

这是2010年的已知错误,还是有人知道现有的解决方法?

谢谢!

编辑1:项目是C#。

编辑2:我使用的确切Robocopy命令是robocopy.exe . \\192.168.5.7\Release /NJS /NJH /Z /W:1 /R:5 /E

3 个答案:

答案 0 :(得分:2)

考虑到MS似乎不想很快解决这个问题,而且我们仍然希望继续前进到VS.NET 2010,我们已经设计了以下解决方法。这对我们来说并不理想,但足够好。

我们大多数长期运行的构建后事件我们只在构建发布时运行,而不是在一般软件开发期间运行。因此,在那些情况下,我们在外部命令窗口中运行这些事件,以便我们可以监视进度。

我们使用unix tee命令(抓住网络某处)在脚本完成后将输出添加到输出窗口。

在postbuild活动中,我们有:

@@echo off
cd "$(ProjectDir)"
START /WAIT cmd /c PostBuildStub.cmd "$(SolutionDir)" "$(ProjectDir)" "$(TargetDir)" "$(SolutionPath)" "$(ConfigurationName)" 
ECHO PostBuild output:
TYPE $(TargetDir)postbuildlog.txt
ECHO Done.

所以postbuild事件启动外部cmd窗口并在完成后将日志文件转储到输出窗口。

PostBuildStub.cmd如下所示:

@echo off
echo.

set SolutionDir=%~1
set ProjectDir=%~2
set TargetDir=%~3
set SolutionFile=%~4
set ConfigurationName=%~5

CD /D "%ProjectDir%"

CALL PostBuild.cmd %1 %2 %3 %4 %5 | "%SolutionDir%\bin\tee.exe" "%TargetDir%\postbuildlog.txt"

if errorlevel 1 exit 1

postbuild存根通过调用真正的postbuild命令创建日志文件,并将输出传递给cmd窗口和日志文件。

然后在PostBuild.cmd中,我们有了很好的旧postbuild命令,可以进行资源编译,ilmerging,混淆,签名或者你需要的任何东西:)

答案 1 :(得分:1)

它对我来说几乎完全相同。我有一个后构建步骤,包括ILMerge,然后是DOS移动命令。从未显示ILMerge输出,但移动的输出是。我在http://connect.microsoft.com,ID 613727上提交了一个错误。

答案 2 :(得分:1)

我想知道使用msbuild <exec>任务而不是后期构建事件是否会解决此问题?

如果<exec>任务不符合您的要求,可能会执行与<exec>任务类似的自定义msbuild任务,例如解决此问题。

<强>更新
我只是尝试在我的msbuild文件中使用<Exec Command="" />而不是PostBuild事件,但它仍然使Visual Studio IDE忙碌\无响应。

也许我们可以创建一个调用Application.DoEvents的自定义msbuild任务来保持UI响应?

更新#2 : 我上传了一个补丁到MSBuild扩展包,它实现了一个名为SmartExec的自定义msbuild任务,可以解决这个问题。

http://msbuildextensionpack.codeplex.com/workitem/9053
http://msbuildextensionpack.codeplex.com/SourceControl/list/patches
补丁ID 9878