了解 MSBuild:打印变量值

Understanding MSBuild: Printing a variable value

我在 .csproj 文件中有以下 Import。 props这个点怎么才能找到Variable的值呢?

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

我收到构建错误:

can not find props files : <path_to_abc>\abc.props

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

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

给我 '' 0.

但那是因为 BeforeBuild 吗?

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

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

遗憾的是,当前未记录导入,但这将随着即将发布的 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 列表,其中包含项目的完全评估属性(包括导入)。

理解语句 属性 定义和导入语句是 按顺序 处理的,所以当 <Import> 使用 属性 - 在条件或项目路径中 - 它将使用当时 属性 的值。

还有其他几个重要方面:

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