如何从MSBuild向日志输出变量值

Sim*_*mon 41 .net msbuild debugging

如何从MSBuild向日志输出变量值?

我正在尝试调试MSBuild脚本,并希望将变量值输出到日志.

Aar*_*son 70

您现在可以使用VS2010 实际调试msbuild脚本.它需要一些黑客攻击并且它不受官方支持,但它是一种选择.

否则使用该Message任务.用于引用一般规则Properties,ItemsItem Metadata(也被称为配料)申请.

这个例子:

<Project DefaultTargets="Build"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <TestItem Include="test1" />
    <TestItem Include="test2" />
    <TestItem Include="test3" />
  </ItemGroup>

  <PropertyGroup>
    <TestProperty>Property Value</TestProperty>
  </PropertyGroup>

  <Target Name="TestMessage" AfterTargets="Build" >

    <!-- Use $(Property Name) to reference a property -->
    <Message Text="$(TestProperty)" Importance="high"/>

    <!-- Use @(Item Name) to output a semi-colon
         separated list of items on one line      -->
    <Message Text="@(TestItem)" Importance="high"/>

    <!-- Use %(Item Name.Metadata Property Name) to 
         call the Message task once for each item.   -->
    <!-- This will output each item on a separate line -->
    <Message Text="%(TestItem.Identity)" Importance="high"/>

  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

会产生这样的输出:

Property Value
test1;test2;test3
test1
test2
test3
Run Code Online (Sandbox Code Playgroud)

  • 为了使您的答案更容易使用,请考虑为每个Message元素添加Importance ="high"属性.这样,当您调用msbuild或者查看VS中的构建输出时,默认情况下将显示消息 (4认同)
  • 另外,要快速挂钩,您可能需要添加刚才在现有csproj中定义的Target,并向目标添加BeforeTargets ="Build".然后用VS构建并查看构建输出. (4认同)
  • 输出会显示在哪里?在Visual Studio的"输出"窗口中(和"显示输出来自:构建")?另外,我把它放在哪个文件中?我只是尝试将其附加到`C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets`文件,但我没有看到任何内容输出. (2认同)