我试图用目录basenames填充ItemGroup,通过转换传递它,从它们创建绝对路径,并导入驻留在那里的文件。它在Message元素中运行得完美无缺,但在Import中没有执行任何操作。我遗漏了什么?
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MyDependencies Include="Dir1" />
<MyDependencies Include="Dir2" />
</ItemGroup>
<!-- "Expansion: C:\path\Dir1\import.targets;C:\some\path\Dir2\import.targets" -->
<Target Name="TestMessage" BeforeTargets="PrepareForBuild">
<Message
Importance="High"
Text="Expansion: @(MyDependencies -> 'C:\path\%(Identity)\import.targets')"
/>
</Target>
<!-- Uncomment to trigger error -->
<!--<Import Project="@(MyDependencies -> 'C:\path\%(Identity)\import.targets')" />-->
</Project>Import的道路仍未扩大,并导致:
error MSB4102: The value "@(MyDependencies -> 'C:\path\%(Identity)\import.targets')" of the "Project" attribute in element <Import> is invalid. Illegal characters in path.发布于 2022-06-07 10:04:52
之所以会发生这种情况,是因为只在导入之后才对ItemGroup进行评估。请参阅https://learn.microsoft.com/en-us/visualstudio/msbuild/comparing-properties-and-items?view=vs-2022#property-and-item-evaluation-order
在生成的评估阶段,导入的文件会按照它们出现的顺序合并到生成中。属性和项按以下顺序在三次传递中定义:
换句话说,Import与在导入位置复制粘贴文件内容几乎是一样的,只有在该MSBuild开始计算属性和项之后。
https://stackoverflow.com/questions/53948207
复制相似问题