Wildcard for content in an XNA content project?

2019-01-27 05:38发布

I have an XNA 3.1 content project (.contentproj) with the following:

<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>

What I'd like to do is be able to specify a wildcard so that tiles\*.bmp gets compiled instead - so that I don't have to keep re-synchronising the content project when I add and remove textures from the "tiles" directory.

Does anyone know a way to do this?

Ideally the solution would ignore the hidden ".svn" directory, under "tiles". And also the content project would continue to work in Visual Studio.

2条回答
Juvenile、少年°
2楼-- · 2019-01-27 06:12

I found a blog post by Shawn Hargreaves that describes how to do this for XNA 1.0:

Wildcard content using MSBuild

Based on that, here is what I did which works with XNA 3.1 (and doesn't cause those weird _0 to appear):

Create a separate "tiles.proj" file with the following content:

<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>

And in the original ".contentproj" file, right before </Project>, add:

<Import Project="tiles.proj" />
查看更多
ら.Afraid
3楼-- · 2019-01-27 06:21

You'll have to use wildcard in your item definition :

<ItemGroup>
  <Compile Include="tiles\**\*.BMP"
           Exclude="tiles\.svn\*">
    <Name>%(Compile.Filename)</Name>
    <Importer>TextureImporter</Importer>
    <Processor>TextureProcessor</Processor>
  </Compile>
</ItemGroup>
查看更多
登录 后发表回答