Visual studio 如何在VisualStudio中实时查看MsBuild输出

Visual studio 如何在VisualStudio中实时查看MsBuild输出,visual-studio,msbuild,Visual Studio,Msbuild,我在.csproj文件中添加了一些额外的目标,以便在项目构建完成后执行一些额外的任务 在完成所有目标之前,Visual Studio输出窗口中不会显示任何内容。我希望能够看到在处理目标时发生的消息 如果我使用MSBuild任务资源管理器(VS扩展),我可以看到消息可以在生成时由VisualStudio窗口拾取,那么我是否只是缺少某个设置 我还尝试将msbuildextensions包中的Exec任务替换为SmartExec 以下是我的.csproj项目文件中的一个片段: <Target N

我在
.csproj
文件中添加了一些额外的目标,以便在项目构建完成后执行一些额外的任务

在完成所有目标之前,Visual Studio输出窗口中不会显示任何内容。我希望能够看到在处理目标时发生的消息

如果我使用MSBuild任务资源管理器(VS扩展),我可以看到消息可以在生成时由VisualStudio窗口拾取,那么我是否只是缺少某个设置

我还尝试将msbuildextensions包中的
Exec
任务替换为
SmartExec

以下是我的
.csproj
项目文件中的一个片段:

<Target Name="PostBuildActions" AfterTargets="Build">
<!--Get the version number from the assembly info -->
<GetAssemblyIdentity AssemblyFiles="$(ProjectDir)$(OutputPath)$(TargetFileName)">
  <Output TaskParameter="Assemblies" ItemName="ToolboxVersion" />
</GetAssemblyIdentity>
<CreateProperty Value="$(ProjectDir)$(OutputPath.TrimEnd('\'))">
  <Output TaskParameter="Value" PropertyName="ToolboxTarget" />
</CreateProperty>
<!-- Run the Simulink Widget Generator tool -->
<CreateProperty Value="&quot;$(SolutionDir)SimulinkWidgetGenerator\bin\$(Configuration)\SimulinkWidgetGenerator.exe&quot; -v %(ToolboxVersion.Version) -d &quot;$(ToolboxTarget)&quot;">
  <Output TaskParameter="Value" PropertyName="WidgetGenCommand" />
</CreateProperty>
<Message Text="Running Simulink Widget Generator:" Importance="High" />
<Message Text="$(WidgetGenCommand)" Importance="High" />
<Exec Command="$(WidgetGenCommand)" ConsoleToMSBuild="true" />
<!-- Invoke Matlab -->
<CreateProperty Value="try, PackageToolbox, catch ex, disp(getReport(ex)), exit(-1), end, exit(0);">
  <Output TaskParameter="Value" PropertyName="MatlabScript" />
</CreateProperty>
<CreateProperty Value="&quot;$(MATLAB_INSTALL_DIR)\bin\matlab.exe&quot; -automation -wait -log -sd &quot;$(ToolboxTarget)&quot; -r &quot;$(MatlabScript)&quot;">
  <Output TaskParameter="Value" PropertyName="MatlabCommand" />
</CreateProperty>
<Message Text="Invoking Matlab: " Importance="High" />
<Message Text="$(MatlabCommand)" Importance="High" />
<Exec Command="$(MatlabCommand)" ConsoleToMSBuild="true" />

在Visual Studio中,您可以在工具–>选项–>项目和解决方案–>生成和运行中配置MSBuild详细信息

发件人:

冗余设置为安静–显示成功或生成失败。下面显示的1行表示成功构建

详细度设置为最小值–显示生成的命令行。为成功重建显示2行

详细度设置为正常。显示MSBuild目标的输出。显示25行以成功重建

详细设置为详细。MSBuild中显示了更多注释。为成功构建显示395行

最后,详细性设置为诊断,显示所有内容。为成功构建显示1097行

对于此问题,我建议您使用类似于msbuild的msbuild命令 xxx.csproj由开发者命令提示符查看正在处理的目标

我是不是错过了一个场景

不,事实上你是对的,就目前而言,VisualStudio中的输出似乎不支持测试后的实时显示

描述这种情况的详细信息:

正如我们所知,构建vs project有两种方法: 1.在VisualStudio2中构建。Msbuild.exe

VS(#1)中的构建过程实际上调用了Msbuild工具(#2)来工作

Msbuild工具将实时向控制台窗口显示目标

在VS中,其构建的输出似乎是非实时的 日志,它将在生成过程结束后显示。如果我们添加像您这样耗时的操作,它将在命令结束后才会显示。 我已经为此做了一个测试,创建了一个简单的test.csproj,并添加了如下脚本:

 <Target Name="WaitingToDoSth" AfterTargets="Test1">
    <Exec Command="$(ProjectDir)DoSth.exe"/>
  </Target>

此DoSth.exe中有一个Thread.sleep(3000)。在VS中,直到DoSth.exe成功执行并且整个构建过程结束,输出才会显示任何内容。 在VS2017的开发人员命令提示符中使用msbuild xxx.csproj命令时,显示可以是实时的,并且我们可以看到在处理目标时出现的消息


如果我的回答有帮助,请给出反馈。谢谢。

实时查看MSBuild输出的关键是使用。非常感谢rainersigwald发布的:


netstandard2.0
_5451

问题不在于输出窗口的内容(此设置会影响该窗口),而在于何时显示输出。我希望输出显示为在构建过程中生成的输出。它只出现在构建过程完成后的末尾。谢谢。你已经证实了我的怀疑。但是,我感到困惑的是,SmartExec MSBuild扩展任务并没有解决这个问题,因为它似乎就是为了解决这个问题而设计的。不确定原因,但扩展在我这方面有问题。它似乎在我最新的vs版本中不起作用(或者我使用了错误的方法)。为此,我想你可以在VSX市场上向他索要。谢谢你的反馈。这只适用于.NET项目吗?我有一个WIX安装程序项目(.wixproj),其中包含许多输出获取步骤,我希望显示实时输出。我还有一个C++项目,其中包括一个步骤,需要在Matlab中编译项目,其中实时输出将是非常有用的。一个来自微软的家伙告诉我MSBuW实时输出“应该”与旧风格的项目文件一起工作。我可能会提出一个问题,因为情况似乎并非如此。我这里有几个不同的例子:哦,一定要看看我打开的这个问题:“NET.Sdk构建意外运行”
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <RootNamespace>_5451</RootNamespace>
  </PropertyGroup>

  <Target Name="LogStuffInRealTime" BeforeTargets="CoreCompile">
    <Exec Command="ping 127.0.0.1" YieldDuringToolExecution="True" ConsoleToMSBuild="true" StandardOutputImportance="high">
      <Output TaskParameter="ConsoleOutput" ItemName="OutputOfExec" />
    </Exec> 
  </Target>
</Project>