使用通配符将文件包含到Visual Studio中的文件夹中

qui*_*uip 12 msbuild visual-studio

我在用

<ItemGroup>
  <EmbeddedResource Include="..\..\resources\hbm\*.hbm.xml" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

将一堆xml文件包含到我的C#项目中.工作良好.

但是,我不希望它们出现在我项目的"根级"中,我宁愿在项目的子文件夹中看到它们.

例如,此文件包含Mapping在Visual Studio 的文件夹中:

<ItemGroup>
  <EmbeddedResource Include="Mapping\User.hbm.xml" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这就是我想要的*.hbm.xml文件.

我无法弄清楚如何做到这一点,仍然保留我的通配符*.hbm.xml部分,并将实际文件保存在不同的目录中.

我查看了MSDN关于MSBUILD和项目的文档,但没有运气.

Ric*_*oss 25

也许这已经在MSBuild中发生了变化,因为最初的答案已经发布,但是可以同时使用通配符和链接.例如,我在C#项目中使用以下块将数据文件导入测试库.

  <ItemGroup>
    <None Include="..\SOMENAME.Tests\data\**\*.*">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Link>data\%(RecursiveDir)%(Filename)%(Extension)</Link>
    </None>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

到目前为止我唯一看到的缺点是MSBuild在文件系统上重新创建文件夹名称(即$(ProjectPath)\data\somesubfolder),这有点烦人但不是一个大问题.

作为一个测试,我也尝试了OP的嵌入资源的请求,使用下面的代码片段,并且这似乎工作正常 - dotPeek显示除了存在于解决方案资源管理器中之外,编译的程序集中还存在资源.

  <ItemGroup>
    <EmbeddedResource  Include="..\SOMENAME.Tests\data\**\*.*">
      <Link>resources\%(RecursiveDir)%(Filename)%(Extension)</Link>
    </EmbeddedResource>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

(这是使用Visual Studio 2013)


Jul*_*rau 6

我认为你不能同时使用链接和通配符.

您可以使用此表示法链接以在Visual Studio中的Mapping文件夹中包含User.hbm.xml文件:

<ItemGroup>
  <EmbeddedResource Include="..\..\resources\hbm\User.hbm.xml">
    <Link>Mapping\User.hbm.xml</Link>
  </EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但你不能这样做

<ItemGroup>
  <EmbeddedResource Include="..\..\resources\hbm\**\*.hbm.xml">
    <Link>%(RecursiveDir)\%(Filename)%(Extension)</Link>
  </EmbeddedResource>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)