我正在尝试使用以下msbuild目标将第二个项目中的文件包含为EmbeddedResources:
<CreateItem Include="..\MyProject.Templates\**\*.css">
<Output ItemName="EmbeddedResource" TaskParameter="Include" />
</CreateItem>
但是包含的文件会丢失它们的路径,例如~\Views\_Layout.cshtml
包含_Layout.cshtml
(根据需要不是Views._Layout.cshtml
)。有没有办法达到预期的效果?
答案 0 :(得分:2)
MSBuild有New Methods for Manipulating Items and Properties。使用这些方法,您可以使用ItemGroup(而不是CreateItem)映射资源,然后使用MSBuild Transforms创建另一个应用MSBuild Well-known Item Metadata的ItemGroup。您可以使用许多项目元数据选项来实现所需的效果。 this answer上有一个明确的语法示例。
我写了一个小脚本作为例子。它创建一个带有* .exe文件的ItemGroup并对其进行转换。使用MSBuild 3.5进行测试。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project DefaultTargets="CreateItems" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="CreateItems">
<ItemGroup>
<Exe Include="..\**\*.exe" />
</ItemGroup>
<ItemGroup>
<TransformedExe Include="@(Exe->'%(Relativedir)')"/>
</ItemGroup>
<Message Text="1 - @(Exe)" />
<Message Text="2 - @(TransformedExe)" />
</Target>
</Project>