我在.csproj
文件中添加了一些其他目标,以便在项目构建完成后执行一些其他任务。
在完成所有目标之前,Visual Studio输出窗口中不会显示任何内容。我希望能够看到在处理目标时发生的消息。
如果我使用MSBuild Task Explorer(一个VS扩展),可以看到消息可以在生成时由Visual Studio窗口拾取,所以我只是在某个地方缺少设置了吗?
我还尝试用MSBuild Extensions软件包中的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=""$(SolutionDir)SimulinkWidgetGenerator\bin\$(Configuration)\SimulinkWidgetGenerator.exe" -v %(ToolboxVersion.Version) -d "$(ToolboxTarget)"">
<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=""$(MATLAB_INSTALL_DIR)\bin\matlab.exe" -automation -wait -log -sd "$(ToolboxTarget)" -r "$(MatlabScript)"">
<Output TaskParameter="Value" PropertyName="MatlabCommand" />
</CreateProperty>
<Message Text="Invoking Matlab: " Importance="High" />
<Message Text="$(MatlabCommand)" Importance="High" />
<Exec Command="$(MatlabCommand)" ConsoleToMSBuild="true" />
答案 0 :(得分:1)
实时查看MSBuild输出的关键是使用MSBuild project SDK。非常感谢Rainersigwald发布了this solution on GitHub:
<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>
答案 1 :(得分:0)
在 Visual Studio 中,您可以在工具–>选项–>项目和解决方案–>生成并运行中配置MSBuild详细程度。
来自here:
详细度设置为安静 –显示成功或构建失败。下面显示1行,表示编译成功。
详细度设置为最小 –显示构建的命令行。显示2行以成功重建。
详细度设置为普通。显示MSBuild目标的输出。显示25行以成功重建。
详细度设置为详细。 MSBuild显示了更多注释。显示395行以成功构建。
最后,Verbosity设置为 Diagnostic ,向您显示所有内容。显示1097行以成功构建。
答案 2 :(得分:0)
对于此问题,我建议您使用msbuild之类的msbuild命令 xxx.csproj通过开发人员命令提示符查看正在处理的目标。
那么我只是在某个地方缺少设置吗?
不,确实您是对的,目前,Visual Studio中的输出似乎不支持我测试后的实时显示。
描述这种情况的详细信息:
我们知道,有两种方法可以构建vs项目: 1.在Visual Studio中构建2. 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命令时,显示可以是实时的,我们可以看到在处理目标时发生的消息。
如果我的回答有帮助,请提供反馈。谢谢。