在 csproj 节点中获取通配符引用
Get wildcard reference in csproj node
举个例子:
<EmbeddedResource Include="Resources\files\main-*.png">
<LogicalName>Images\main\???.resources</LogicalName>
</EmbeddedResource>
如何从节点的子节点中获取“*”部分?我找到了 %Filename%,但这太多了。
可以,但需要一些property functions功夫。
<Project>
<!--
Create files:
Resources\files\main-foo.png
Resources\files\main-bar.png
Run:
MSBuild.exe foo.proj /t:Test
Output:
LogicalName: Images\main\foo.resources
LogicalName: Images\main\bar.resources
-->
<ItemGroup>
<EmbeddedResource Include="Resources\files\main-*.png">
<_DashPosition>$([System.String]::Copy('%(FileName)').IndexOf('-'))</_DashPosition>
<_LogicalNameStart>$([MSBuild]::Add(%(_DashPosition), 1))</_LogicalNameStart>
<LogicalName>Images\main$([System.String]::Copy('%(FileName)').Substring(%(_LogicalNameStart))).resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
<Target Name="Test">
<Message Text="LogicalName: %(EmbeddedResource.LogicalName)" Importance="high"/>
</Target>
</Project>
一般的方法就像在 C# 或其他语言中一样。找到分隔符(这里是文件名中的 -
)并将其后的所有内容作为 LogicalName
.
请注意,我使用了“临时”项目元数据(“_”只是此处的约定)以使事情更加清晰。从理论上讲,您可以将所有东西塞进 <LogicalName>
本身。
举个例子:
<EmbeddedResource Include="Resources\files\main-*.png">
<LogicalName>Images\main\???.resources</LogicalName>
</EmbeddedResource>
如何从节点的子节点中获取“*”部分?我找到了 %Filename%,但这太多了。
可以,但需要一些property functions功夫。
<Project>
<!--
Create files:
Resources\files\main-foo.png
Resources\files\main-bar.png
Run:
MSBuild.exe foo.proj /t:Test
Output:
LogicalName: Images\main\foo.resources
LogicalName: Images\main\bar.resources
-->
<ItemGroup>
<EmbeddedResource Include="Resources\files\main-*.png">
<_DashPosition>$([System.String]::Copy('%(FileName)').IndexOf('-'))</_DashPosition>
<_LogicalNameStart>$([MSBuild]::Add(%(_DashPosition), 1))</_LogicalNameStart>
<LogicalName>Images\main$([System.String]::Copy('%(FileName)').Substring(%(_LogicalNameStart))).resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
<Target Name="Test">
<Message Text="LogicalName: %(EmbeddedResource.LogicalName)" Importance="high"/>
</Target>
</Project>
一般的方法就像在 C# 或其他语言中一样。找到分隔符(这里是文件名中的 -
)并将其后的所有内容作为 LogicalName
.
请注意,我使用了“临时”项目元数据(“_”只是此处的约定)以使事情更加清晰。从理论上讲,您可以将所有东西塞进 <LogicalName>
本身。