我在csproj中关注Import
。
如何在道具的这一点找到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
,它是否在当前时间打印该值?
如何在评估道具时看到放入的值?
答案 0 :(得分:2)
可悲的是,目前还没有记录导入,随着即将推出的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>
会看到之后定义/导入的属性值)