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

使用msbuild动态包含文件,同时保留相对路径?,msbuild,embedded-resource,csproj,Msbuild,Embedded Resource,Csproj,我正在尝试使用以下msbuild目标将第二个项目中的文件作为嵌入资源包括在内: <CreateItem Include="..\MyProject.Templates\**\*.css"> <Output ItemName="EmbeddedResource" TaskParameter="Include" /> </CreateItem> 但是包含的文件失去了它们的路径,例如~\Views\\u Layout.cshtml包

我正在尝试使用以下msbuild目标将第二个项目中的文件作为嵌入资源包括在内:

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

但是包含的文件失去了它们的路径,例如
~\Views\\u Layout.cshtml
包含为
\u Layout.cshtml
(而不是
视图。\u Layout.cshtml
)。有什么方法可以达到预期的效果吗?

MSBuild有。使用这些方法,您可以使用ItemGroup(而不是CreateItem)映射资源,然后使用创建另一个ItemGroup。有许多项元数据选项可用于实现所需的效果。上面有一个关于语法的清晰示例

我写了一个小脚本作为例子。它使用*.exe文件创建一个项目组并对其进行转换。使用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>


不推荐使用“CreateItem”任务,您有什么理由使用它吗?复制n粘贴我想要实现的就是(1)从通配符路由引入嵌入式资源,(2)以这种方式VS不会将其具体化,(3)同时保留路径结构。这管理(1)和(2)…如此简单和有用。我想知道这是否对OP有效。我刚刚将一个项目从NAnt切换到MSBuild,到目前为止,我对它的深思熟虑印象深刻。您的“”已被删除。。。你有新的链接吗?或者…?@Seagal82尽我所能找到一个新链接,不知道为什么他们删除了答案