【问题标题】:Understanding MSBuild: Printing a variable value了解 MSBuild:打印变量值
【发布时间】:2018-01-17 09:13:56
【问题描述】:

我在 .csproj 文件中关注 Import。在这个 props 点如何找到Variable 的值?

<Import Project="<path_to_abc>\$(Variable)\abc.props>"
        Condition=" '$(Variable)' != '' "       
/>

我得到构建错误:

找不到道具文件:&lt;path_to_abc&gt;\\abc.props

如何在此处查看Variable 的值?如果我将Message 放在Import 上面的.csproj 文件中,我应该给出什么Target 依赖?

<Target Name="PrintInfo" BeforeTargets="BeforeBuild">
   <Message Text="'$(Variable)' $(Variable.length) " />
</Target>

给我'' 0。

但那是因为BeforeBuild吗?

MSBuild 如何工作? 它是否在先到先得的顺序之前和先处理所有属性? 然后如果它处理Targets,它会打印当前时间的值吗?

在评估道具时如何查看输入的值?

【问题讨论】:

    标签: build msbuild csproj


    【解决方案1】:

    遗憾的是,目前尚未记录导入,但随着即将发布的 MSBuild 15.3 版本及其二进制日志记录功能,这种情况即将发生变化。

    使用/flp:Verbosity=diagnostic 调用MSBuild 将向msbuild.log 文件发出属性重新分配事件,如下所示:

    0>Property reassignment: $(Foo)="bar" (previous value: "foo") at /Users/martin.ullrich/tmp/test.proj (10,5)
    

    然后,日志将包含一个 Initial Properties 列表,其中包含项目的完全评估属性(包括导入)。

    必须了解语句属性定义和导入语句是按顺序处理的,因此当&lt;Import&gt; 使用属性时 - 无论是在条件还是项目路径中 - 它都会使用在那一刻的财产价值。

    还有一些其他重要方面:

    • 属性组在在项组和项定义组之前处理。甚至在所有导入的项目中! (因此带有条件的&lt;ItemGroup&gt; 将看到之后定义/导入的属性值)
    • 在考虑执行目标时评估目标条件,并且可能会受到所有导入的项目文件和已运行的其他目标中发生的修改的影响。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多