vcxproj.filters 文件

filters 文件 (*.vcxproj.filters) 是一个 MSBuild 格式的 XML 文件,位于根项目文件夹中。 它指定哪些文件类型进入解决方案资源管理器中的逻辑文件夹。 在下图中,.cpp 文件位于“源文件”节点下。 .h 文件位于“头文件”节点下,.ico.rc 文件位于资源文件下。 此位置由筛选器文件控制。

解决方案资源管理器中逻辑文件夹视图的屏幕截图。

解决方案资源管理器与以下节点的标注一起显示:头文件(包括 MFCApplication1.h 等文件)、资源文件(包括 MFCApplication1.ico 等文件)和源文件(包括 MFCApplication1.cpp 等文件)。

创建自定义筛选器文件

Visual Studio 自动创建此文件。 对于桌面应用程序,预定义的逻辑文件夹(筛选器)是:源文件、头文件和资源文件。 其他项目类型(如 UWP)可能有不同的默认文件夹集。 Visual Studio 会自动为每个文件夹分配已知文件类型。 如果要创建具有自定义名称的筛选器或包含自定义文件类型的筛选器,可以在项目的根文件夹中或现有筛选器下创建自己的筛选器文件。 (“引用”和“外部依赖项”是不参与筛选的特殊文件夹。)

示例

以下示例显示前面所示示例的筛选器文件。 其层次结构是扁平的,也就是没有嵌套逻辑文件夹。 UniqueIdentifier 节点是可选的。 它使 Visual Studio 自动化接口能够查找筛选器。 Extensions 也是可选的。 将新文件添加到项目时,会将其添加到具有匹配文件扩展名的最顶层筛选器。 若要将文件添加到特定筛选器,请右键单击筛选器,然后选择“添加新项”

包含 ClInclude 节点的 ItemGroup 是在项目首次启动时创建的。 如果要生成自己的 vcxproj 文件,请确保所有项目项也都在筛选器文件中具有条目。 ClInclude 节点中的值会覆盖基于文件扩展名的默认筛选。 使用 Visual Studio 向项目添加新项时,IDE 会在筛选器文件中添加单个文件条目。 如果更改文件扩展名,则不会自动重新分配筛选器。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
    </Filter>
    <Filter Include="Resource Files">
      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="MFCApplication1.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="MFCApplication1Dlg.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="stdafx.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="targetver.h">
      <Filter>Header Files</Filter>
    </ClInclude>
    <ClInclude Include="Resource.h">
      <Filter>Header Files</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="MFCApplication1.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="MFCApplication1Dlg.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
    <ClCompile Include="stdafx.cpp">
      <Filter>Source Files</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="MFCApplication1.rc">
      <Filter>Resource Files</Filter>
    </ResourceCompile>
  </ItemGroup>
  <ItemGroup>
    <None Include="res\MFCApplication1.rc2">
      <Filter>Resource Files</Filter>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Image Include="res\MFCApplication1.ico">
      <Filter>Resource Files</Filter>
    </Image>
  </ItemGroup>
</Project>

若要创建嵌套逻辑文件夹,请声明筛选器 ItemGroup 中的所有节点,如下所示。 每个子节点必须声明指向最顶层父级节点的完整逻辑路径。 在以下示例中,必须声明一个空的 ParentFilter,因为它在后面的节点中被引用。

  <ItemGroup>
    <Filter Include="ParentFilter">
    </Filter>
    <Filter Include="ParentFilter\Source Files"> <!-- Full path to topmost parent.-->  
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <!--  Optional-->
      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> <!-- Optional -->
    </Filter>
    <Filter Include="Header Files">
      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
      <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
    </Filter>
  </ItemGroup>