MSBuild 中的解决方案筛选器

解决方案筛选器文件是扩展名为 JSON 文件,.slnf 指示要从解决方案中的所有项目生成或加载的项目。 从 MSBuild 16.7 开始,可以在解决方案筛选器文件上调用 MSBuild,以生成启用了筛选的解决方案。

注释

解决方案筛选器文件可减少加载或生成并简化格式的项目集。 仍需要解决方案文件。

从命令行生成解决方案筛选器

从命令行生成解决方案筛选器文件使用与生成解决方案文件完全相同的语法。 指定解决方案筛选器文件而不是启用筛选生成的解决方案,如下所示:

msbuild [options] solutionFilterFile.slnf

还可以像平常一样追加开关和额外属性。 请参阅 MSBuild 命令行参考。 此命令将生成筛选的项目及其所依赖的任何项目。 从命令行生成解决方案筛选器时,MSBuild 会自动遵循依赖项。 如果项目在筛选器中指定或由生成的项目引用,它将生成项目。

解决方案筛选器文件

可以使用 Visual Studio 来处理解决方案筛选器文件。 在 Visual Studio 中打开解决方案筛选器会显示已卸载的项目和已加载的项目,并为你提供加载更多项目以选择要生成的项目的选项。 也可以加载初始项目或项目依赖的所有项目进行生成,但这不是必需的。 请参阅 筛选的解决方案

解决方案筛选器不必与解决方案位于同一文件夹中。 解决方案文件的路径相对于解决方案筛选器文件的位置,但每个项目的路径相对于解决方案文件本身,应与解决方案文件中的项目路径匹配。 以下示例演示如何使用相对路径:

{
  "solution": {
    "path": "..\\..\\Documents\\GitHub\\msbuild\\MSBuild.sln",
    "projects": [
      "src\\Build.OM.UnitTests\\Microsoft.Build.Engine.OM.UnitTests.csproj"
    ]
  }
}

路径中的反斜杠必须加倍,因为它们被转义。

注释

如果使用 .slnx 解决方案文件格式(MSBuild 17.12 及更高版本中支持),.slnx 文件优先于 .slnf 文件。

示例

下面是 Visual Studio 中筛选解决方案的示例:

Visual Studio屏幕截图

在此解决方案中,ClassLibrary1 由 ProjectA 和 ProjectB 使用,因此 ClassLibrary1 作为项目引用列出。

下面是 Visual Studio 生成的解决方案筛选器文件:

{
  "solution": {
    "path": "MyApplication.sln",
    "projects": [
      "MyApplication\\MyApplication.csproj",
      "ProjectA\\ProjectA.csproj"
    ]
  }
}

在此示例中,在启用筛选的情况下生成(通过使用命令 MSBuild [options] MyFilter.slnf),MSBuild 会生成 MyApplication 和 ProjectA,因为它们在解决方案筛选器文件中显式列出。 作为生成 ProjectA 的一部分,MSBuild 会生成 ClassLibrary1,因为 ProjectA 依赖于它。 ProjectB 未生成。 (此讨论假设有一个干净的生成。如果项目之前已生成,则通常的规则适用于跳过已 up-to-date 的项目。

另请参阅