MSBuild AfterBuild消息未显示实时

时间:2016-06-30 13:59:04

标签: .net asp.net-mvc-4 visual-studio-2012 msbuild csproj

我在Visual Studio 2012中的ASP.NET MVC 4项目的.csproj文件中有以下内容:

<Target Name="AfterBuild">
  <CallTarget Targets="InstallBuildDependencies" />
  <CallTarget Targets="BuildAssets" />
</Target>
<Target Name="InstallBuildDependencies">
  <Message Text="Installing build dependencies:" Importance="high" />
  <Exec Command="npm install" />
</Target>
  <Target Name="BuildAssets">
  <Message Text="Building assets:" Importance="high" />
  <Exec Command="grunt build" />
</Target>

在同一个项目的.pubmxl中使用类似的东西:

  <PropertyGroup>
    <!-- Other properties here -->
    <InstallBuildDependenciesCmd>npm install</InstallBuildDependenciesCmd>
    <BuildDistAssetsCmd>grunt dist</BuildDistAssetsCmd>
    <PipelineDependsOn>
      InstallBuildDependencies;
      BuildDistAssets;
    </PipelineDependsOn>
  </PropertyGroup>
  <Target Name="InstallBuildDependencies">
    <Message Text="Installing build dependencies:" Importance="high" />
    <Exec Command="$(InstallBuildDependenciesCmd)" />
  </Target>
  <Target Name="BuildDistAssets" AfterTargets="InstallBuildDependencies">
    <Message Text="Building distribution assets:" Importance="high" />
    <Exec Command="$(BuildDistAssetsCmd)" />
  </Target>

问题在于,在第一个代码段中,在构建中的所有内容都完成之前,命令中的任何消息或输出都不会显示在Visual Studio的输出控制台中。这并不理想,因为最好在&#34;实时&#34;中看到消息和命令输出。

在第二个片段中,消息和命令输出都显示在&#34;实时&#34;在输出控制台中。

是否可以将第一个第一个代码段的消息实时显示,就像第二个代码段中的消息一样?为什么我会遇到这种不一致的情况?

2 个答案:

答案 0 :(得分:1)

超级迟到的答案,但最近因同样的问题而跌跌撞撞。 根据备注部分中的Exec Task documentation,似乎无法做到这一点:

  

但是,与更具体的任务不同,Exec任务无法从其运行的工具或命令中收集输出。

希望这为其他人节省一些时间。

答案 1 :(得分:0)

尝试使用DependsOnTargets代替CallTarget

<Target Name="AfterBuild" DependsOnTargets="InstallBuildDependencies,BuildAssets">
</Target>