通常大家都不会关心 Visual Studio 的项目文件里是如何记录这个项目所包含的所有文件的,因为各位开发者们早已经习惯于右键添加文件或者拖拽文件进项目了。但如果你在某一个文件夹中放了大量的文件(尤其是图片等资源文件),那么这时会卡很久才能拖进去,拖完之后如果还要批量修改生成操作,那真的是痛不欲生。

但是,Visual Studio 提供的项目文件(*.csproj)其实是支持通配符的。


比如,我们通常的项目文件的片段是这样的:

<ItemGroup>
  <Content Include="Properties\Default.rd.xml" />
  <Content Include="Assets\LockScreenLogo.scale-200.png" />
  <Content Include="Assets\SplashScreen.scale-200.png" />
  <Content Include="Assets\Square150x150Logo.scale-200.png" />
  <Content Include="Assets\Square44x44Logo.scale-200.png" />
  <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
  <Content Include="Assets\StoreLogo.png" />
  <Content Include="Assets\Wide310x150Logo.scale-200.png" />
</ItemGroup>

但是,改成这样的话,以后新添加的 *.png 文件也会加入:

<ItemGroup>
  <Content Include="Properties\Default.rd.xml" />
  <Content Include="Assets\*.png" />
</ItemGroup>

而且,如果你想改生成方式,也很简单:

<ItemGroup>
  <None Include="Properties\Default.rd.xml" />
  <None Include="Assets\*.png" />
</ItemGroup>

但是,小心有坑,因为如果你的目录下是多个文件夹嵌套的话,需要在通配符中指定层级个数,有多少层加多少层:

<ItemGroup>
  <Content Include="Properties\Default.rd.xml" />
  <Content Include="Assets\*.png" />
  <Content Include="Assets\*\*.png" />
  <Content Include="Assets\*\*\*.png" />
</ItemGroup>

参考资料


本文会经常更新,请阅读原文: https://walterlv.github.io/post/vs/2017/09/26/wildcards-in-vs-projects.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系