使用msbuild动态包含文件,同时保留相对路径?

问题描述 投票:3回答:1

我正在尝试使用以下msbuild目标将第二个项目中的文件包含为EmbeddedResources:

    <CreateItem Include="..\MyProject.Templates\**\*.css">
      <Output ItemName="EmbeddedResource" TaskParameter="Include" />
    </CreateItem>

但是包含的文件会丢失它们的路径~\Views\_Layout.cshtml被包括为_Layout.cshtml(不是所需的Views._Layout.cshtml)。有没有办法达到预期的效果?

msbuild embedded-resource csproj
1个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.