XNA内容项目中的内容的通配符?

时间:2010-07-13 04:58:46

标签: visual-studio msbuild xna

我有一个XNA 3.1内容项目(.contentproj),其中包含以下内容:

<ItemGroup>
<Compile Include="tiles\B000N800.BMP">
  <Name>B000N800</Name>
  <Importer>TextureImporter</Importer>
  <Processor>TextureProcessor</Processor>
</Compile>
<Compile Include="tiles\B000N801.BMP">
  <Name>B000N801</Name>
  <Importer>TextureImporter</Importer>
  <Processor>TextureProcessor</Processor>
</Compile>
(... and so on ...)
</ItemGroup>

我想要做的是能够指定一个通配符,以便编译tiles\*.bmp - 这样当我添加和删除纹理时,我不必继续重新同步内容项目“tiles”目录。

有没有人知道这样做的方法?

理想情况下,解决方案会忽略“tiles”下隐藏的“.svn”目录。内容项目也将继续在Visual Studio中运行。

2 个答案:

答案 0 :(得分:3)

您必须在项目定义中使用通配符:

<ItemGroup>
  <Compile Include="tiles\**\*.BMP"
           Exclude="tiles\.svn\*">
    <Name>%(Compile.Filename)</Name>
    <Importer>TextureImporter</Importer>
    <Processor>TextureProcessor</Processor>
  </Compile>
</ItemGroup>

答案 1 :(得分:2)

我找到了一篇Shawn Hargreaves的博客文章,描述了如何为XNA 1.0做到这一点:

Wildcard content using MSBuild

基于此,以下是我使用XNA 3.1进行的操作(并且不会导致出现那些奇怪的_0):

使用以下内容创建单独的“tiles.proj”文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<ItemGroup>
  <WildcardContent Include="tiles\**\*.BMP" Exclude="tiles\.svn\*">
    <Importer>TextureImporter</Importer>
    <Processor>TextureProcessor</Processor>
  </WildcardContent>
</ItemGroup>

<Target Name="BeforeBuild">
  <CreateItem Include="@(WildcardContent)" AdditionalMetadata="Name=%(FileName)">
    <Output TaskParameter="Include" ItemName="Compile" />
  </CreateItem>
</Target>
</Project>

在原来的“.contentproj”文件中,在</Project>之前,添加:

<Import Project="tiles.proj" />