项目查询 API 概念
在 Visual Studio 中,项目是一起编译为可执行文件或其他输出形式的文件的集合,而解决方案是项目的集合。 在文件系统中,分别通过项目文件和解决方案文件来表示项目和解决方案。 有关详细信息,请参阅什么是 Visual Studio 中的解决方案和项目?。
项目系统位于磁盘上的项目或解决方案文件(例如 .csproj
和 .vbproj
)和 Visual Studio 的各种功能之间,这些功能包括但不限于解决方案资源管理器、设计器、调试器、语言服务、生成和部署。 项目系统是 Visual Studio 组件的一部分,可帮助用户处理和维护项目、运行生成,从而生成结果并测试输出,并且与项目文件中包含的文件进行的几乎所有交互都通过项目系统发生。 在此处查找有关项目系统的详细信息。
项目查询 API 的目标是使扩展插件能够检索有关项目和解决方案的数据并进行更改。
可以通过项目查询执行的操作的示例包括:
- 枚举项目中的源文件
- 检查项目引用的 NuGet 包
- 查找具有一组给定功能的所有项目
- 向项目添加新文件
- 修改项目的属性
项目查询是引用各种项的一系列子句。 有关常见任务的项目查询的详细信息和示例,请参阅项目查询概述。
项目查询项类型
可以在项目查询中引用许多不同的项。 某些项具有同样可以引用的子集合。 例如,WorkSpace
包含 Projects
集合,每个集合都包含 Files
集合。
术语 | 说明 |
---|---|
工作区 | 用于提供入口点的 API 的顶级工作区。 |
PropertiesAvailableStatus | 用于检查在结果中属性值是否可用的入口点。 |
QueryableSpace.Projects | 工作区中的所有项目。 |
QueryableSpace.Solutions | 工作区中的所有解决方案。 |
解决方案 | 表示 Visual Studio 中的解决方案。 |
项目 | 表示 Visual Studio 中的大多数项目,但解决方案文件夹在 VisualStudio.Extensibility 中以不同的方式表示。 |
SolutionFolder | 表示解决方案文件夹,它是一个虚拟文件夹,用于对 Visual Studio 解决方案中的项目和文件进行分组。 |
文件夹 | 表示项目包含的文件夹。 |
文件 | 表示项目或解决方案文件夹包含的文件。 |
ExternalFile | 表示项目引用的外部文件,C++ 项目尚不支持该文件。 |
properties | 表示项目、配置或文件的属性的动态集(弱名称/类型)。 |
RuleName | 表示项目配置中的规则集。 |
ProjectReference | 表示项目到项目的引用,包括共享项目引用。 |
PackageReference | 表示项目配置中的包引用,通常是 NuGet 包引用。 |
AssemblyReference | 表示项目配置中引用的程序集。 |
ConfigurationDimensionDefinition | 表示用于声明项目配置的值。 |
ProjectConfiguration | 表示项目配置。 |
ConfigurationDimension | 表示单个项目配置的每个维度的值。 |
OutputGroup | 表示项目输出的一个集合。 |
输出 | 表示单个输出组内的一个项。 |
LaunchProfile | 表示在项目中定义的启动配置文件。 |
PropertyPage | 表示项目显示的属性页。 |
启动项目 | 表示在解决方案中定义的启动项目。 |
项目查询子句类型
项目查询中的子句确定应在输出中返回的项类型、它们所属的集合、应具有的属性以及返回的项是否可变。 子句还可用于限制和筛选输出。
术语 | 说明 |
---|---|
With | 请求从查询返回的属性/集合的值。 |
WithRequired | 请求必须从查询返回的属性/集合的值。 |
Where | 请求根据谓词筛选查询结果。 |
获取 | 获取查询结果中的子项。 |
QueryAsync | 执行查询并以 IAsyncEnumerable 形式检索结果。 |
AsQueryable | 从上一个检索到的对象启动查询。 |
QueryFrom | 从先前检索到的对象集合启动查询。 |
AsUpdatable | 开始根据查询结果更新对象。 |
ExecuteAsync | 执行更新查询。 |
项目查询筛选类型
筛选类型有助于优化和聚集查询结果。 请注意,下面列出的某些筛选类型可能不适用于每个查询项。
术语 | 说明 |
---|---|
ConfigurationsByName | 将查询结果筛选至特定的配置名称。 |
FilesByPath | 将查询结果筛选至特定的文件路径。 |
OutputGroupsByName | 将查询结果筛选至特定的输出组名。 |
ProjectsByCapabilities | 将查询筛选至特定的项目功能。 |
ProjectsByPath | 将查询结果筛选至特定的项目路径。 |
ProjectsByProjectGuid | 将查询结果筛选至特定的项目 GUID。 |
RuleResultsByRuleName | 将查询筛选至特定的规则名称。 |
Skip | 通过跳过对有限数量的项执行查询结果。 |
项目查询操作类型
项目查询中的操作决定了对项目系统进行的修改。 请注意,每个查询项类型都有其自己的操作可供使用。 以下是操作查询的简单列表。
术语 | 说明 |
---|---|
AddAssemblyReference | 表示向项目添加程序集引用的操作。 |
AddConfigurationDimensionValue | 向配置维度(例如配置或平台)添加新值。 |
AddFiles | 表示将现有文件添加到项目的操作。 |
AddLaunchProfile | 表示向项目添加新的启动配置文件的操作。 |
AddPackageReference | 表示向项目添加包引用的操作。 |
AddProjectReference | 表示向项目引用添加项目的操作。 |
AddProject | 表示向解决方案或解决方案文件夹添加项目的操作。 |
AddProjectReferenceByPath | 表示向项目路径的项目引用添加项目的操作。 |
AddSolutionConfiguration | 表示添加解决方案配置的操作。 |
生成 | 表示生成解决方案的操作。 |
Clean | 表示清理解决方案的操作。 |
ConfigurationDimensionValue | 表示设置配置的维度值的操作。 |
CreateFile | 表示在项目中创建新文件的操作。 |
CreateFolder | 表示在项目中创建文件夹的操作。 |
CreateSolutionFolder | 表示向解决方案或现有解决方案文件夹添加解决方案文件夹的操作。 |
调试 | 表示调试解决方案的操作。 |
DeleteConfigurationDimensionValue | 从配置维度(例如配置或平台)删除值。 |
删除 | 表示删除项目的操作。 |
DeleteSolutionConfiguration | 表示删除解决方案配置的操作。 |
部署 | 表示部署解决方案的操作。 |
DuplicateLaunchProfile | 表示复制现有启动配置文件的操作。 |
排除 | 表示排除项目的操作。 |
重新生成 | 表示重新生成解决方案的操作。 |
ReloadProject | 表示重新加载项目的操作。 |
RemoveLaunchProfile | 表示从项目中删除启动配置文件的操作。 |
RenameFile | 表示重命名项目中的文件的操作。 |
RenameFolder | 表示重命名项目中的文件夹的操作。 |
RenameSolutionFolder | 表示重命名解决方案文件夹的操作。 |
RenameProject | 表示重命名项目的操作。 |
运行 | 表示运行解决方案的操作。 |
RunCustomTool | 表示运行自定义工具的操作。 |
保存 | 表示保存项目的操作。 |
SetPropertyValue | 表示设置属性值的操作。 |
SetCopyToLocal | 表示为项目引用设置 CopyToLocal 值的操作。 |
SetBuildProperty | 表示设置项目配置生成属性的值的操作。 |
SetEvaluatedUIPropertyValue | 表示设置用户可见属性的计算值的操作。 |
SetLaunchProfilePropertyValue | 表示设置通过启动配置文件公开的属性的值的操作。 |
SetPackageReferenceVersion | 表示重命名解决方案文件夹的操作。 |
SetSolutionFolderName | 表示设置解决方案文件夹名称的操作。 |
SetStartupProjects | 表示设置启动项目的操作。 |
SetUnevaluatedUIPropertyValue | 表示设置用户可见属性的未计算值的操作。 |
UnloadProject | 表示卸载项目的操作。 |
WaitIntellisenseReady | 表示等待项目或解决方案 Intellisense 操作进度准备就绪的操作。 |
项目查询更新类型
这些查询支持监视对查询结果进行的更新。
术语 | 说明 |
---|---|
TrackUpdatesAsync | 表示跟踪查询更改的操作。 |
相关内容
若要查看常见任务的一些项目查询示例,请参阅项目查询概述
有关使用项目查询 API 的示例扩展,请参阅项目查询示例