Conceitos da API de consulta de projetos

No Visual Studio, projetos são coleções de arquivos que são compilados juntos em um executável ou alguma outra forma de saída. Já as soluções são coleções de projetos. Os projetos e soluções são representados no sistema de arquivos por arquivos de projeto e arquivos de solução, respectivamente. Para obter mais informações, consulte O que são soluções e projetos no Visual Studio?.

O sistema de projeto fica entre um arquivo de projeto ou solução no disco (por exemplo, .csproj e .vbproj) e vários recursos do Visual Studio, incluindo, entre outros, o Gerenciador de Soluções, designers, o depurador, serviços de linguagem, compilação e implantação. Os sistemas de projetos são um dos componentes do Visual Studio para ajudar os usuários a trabalhar e manter projetos, executar compilações para produzir resultados e testar a saída, e praticamente todas as interações que ocorrem com os arquivos contidos em um arquivo de projeto acontecem por meio do sistema de projetos. Encontre mais informações sobre sistemas de projetos aqui.

O objetivo da API de consulta de projetos é permitir que as extensões recuperem dados sobre projetos e soluções e façam alterações.

Alguns exemplos do que você pode fazer com uma consulta de projeto:

  • Enumerar os arquivos de origem em um projeto
  • Verificar quais pacotes NuGet são referenciados por um projeto
  • Localizar todos os projetos que têm um determinado conjunto de recursos
  • Adicionar novos arquivos ao projeto
  • Modificar as propriedades de um projeto

Uma consulta de projeto é uma série de cláusulas que fazem referência a vários itens. Consulte a Visão geral da consulta de projetos para obter mais informações e exemplos de consultas de projetos para tarefas comuns.

Tipos de item de consulta de projetos

Há muitos itens diferentes aos quais você pode fazer referência em suas consultas de projeto. Alguns itens têm filhos ou coleções filhas que também podem ser referenciadas. Por exemplo, um WorkSpace contém uma coleção de Projects, e cada um dos quais contém uma coleção de Files.

Termo Descrição
WorkSpace O espaço de trabalho de nível superior da API para fornecer o ponto de entrada.
PropertiesAvailableStatus O ponto de entrada para verificar se um valor de propriedade está disponível no resultado.
QueryableSpace.Projects Todos os projetos no espaço de trabalho.
QueryableSpace.Solutions Todas as soluções no espaço de trabalho.
Solution Representa uma solução no Visual Studio.
Project Representa a maioria dos projetos no Visual Studio, mas as pastas de soluções são representadas de forma diferente no VisualStudio.Extensibility.
SolutionFolder Representa uma pasta de solução, que é uma pasta virtual para agrupar projetos e arquivos dentro de uma solução do Visual Studio.
Folder Representa uma pasta contida por um projeto.
File Representa um arquivo contido por um projeto ou uma pasta de solução.
ExternalFile Representa arquivos externos referenciados por um projeto, os quais ainda não são compatíveis com projetos C++.
Propriedade Representa o conjunto dinâmico (nome fraco/tipo) de propriedades de um projeto, uma configuração ou um arquivo.
RuleName Representa o conjunto de regras em uma configuração de projeto.
ProjectReference Representa referências de projeto para projeto, incluindo referências de projeto compartilhadas.
PackageReference Representa uma referência de pacote em uma configuração de projeto, normalmente uma referência de pacote NuGet.
AssemblyReference Representa um assembly referenciado em uma configuração de projeto.
ConfigurationDimensionDefinition Representa valores para declarar configurações de projeto.
ProjectConfiguration Representa uma configuração de projeto.
ConfigurationDimension Representa valores de cada dimensão de uma configuração de projeto única.
OutputGroup Representa uma coleção de saída do projeto.
Saída Representa um item dentro de um único grupo de saída.
LaunchProfile Representa perfis de inicialização definidos em um projeto.
PropertyPage Representa as páginas de propriedades mostradas para o projeto.
Projetos de inicialização Representa os projetos de inicialização definidos na solução.

Tipos de cláusula de consulta de projeto

As cláusulas em sua consulta de projeto determinam quais tipo de itens devem ser retornados na saída, de qual coleção eles devem vir, quais propriedades eles devem ter e se os itens retornados devem ser mutáveis. As cláusulas também são usadas para limitar e filtrar a saída.

Termo Descrição
With Solicita que o valor de uma propriedade/coleção seja retornado da consulta.
WithRequired O valor das solicitações de uma propriedade/coleção deve ser retornado da consulta.
Onde Solicita que o resultado da consulta seja filtrado com base em um predicado.
Obter Obtem itens filhos em vez do resultado da consulta.
QueryAsync Executa uma consulta e recupera o resultado como IAsyncEnumerable.
AsQueryable Inicia uma consulta a partir de um objeto recuperado anteriormente.
QueryFrom Inicia uma consulta de uma coleção de objetos recuperados previamente.
AsUpdatable Inicia a atualização do objeto a partir de um resultado de consulta.
ExecuteAsync Executa uma consulta de atualização.

Tipos de filtragem de consulta de projeto

Os tipos de filtragem facilitam o refinamento e o foco dos resultados da consulta. Observe que determinados tipos de filtragem listados abaixo podem não estar disponíveis para todos os itens de consulta.

Termo Descrição
ConfigurationsByName Filtra os resultados da consulta para um nome de configuração específico.
FilesByPath Filtra os resultados da consulta para um caminho de arquivo específico.
OutputGroupsByName Filtra os resultados da consulta para um nome de grupo de saída específico.
ProjectsByCapabilities Filtra a consulta para recursos de projeto específicos.
ProjectsByPath Filtra os resultados da consulta para um caminho de projeto específico.
ProjectsByProjectGuid Filtra os resultados da consulta para um guid de projeto específico.
RuleResultsByRuleName Filtra a consulta para um nome de regra específico.
Ignorar Executa um resultado de consulta para um número limitado de itens ignorando os demais.

Tipos de ação de consulta de projetos

As ações em uma consulta do projeto determinam quais modificações são feitas no sistema do projeto. Observe que os tipos de item de cada consulta têm suas próprias ações disponíveis para eles. Abaixo está uma lista simples de consultas de ação.

Termo Descrição
AddAssemblyReference Representa a operação de adicionar uma referência de assembly a um projeto.
AddConfigurationDimensionValue Adiciona um novo valor a uma dimensão de configuração (por exemplo, Configuração ou Plataforma).
AddFiles Representa a operação de adicionar um arquivo existente ao projeto.
AddLaunchProfile Representa a operação de adicionar um novo perfil de inicialização a um projeto.
AddPackageReference Representa a operação de adicionar uma referência de pacote a um projeto.
AddProjectReference Representa a operação de adicionar um projeto à referência de projeto a um projeto.
AddProject Representa a operação de adicionar um projeto a uma solução ou a uma pasta de solução.
AddProjectReferenceByPath Representa a operação de adicionar um projeto à referência do projeto ao caminho de um projeto.
AddSolutionConfiguration Representa a operação de adicionar uma configuração de solução.
Compilação Representa a operação de compilar uma solução.
Clean Representa a operação de limpar uma solução.
ConfigurationDimensionValue Representa a operação de definir o valor da dimensão de uma configuração.
CreateFile Representa a operação de criar um novo arquivo em um projeto.
CreateFolder Representa a operação de criar uma pasta em um projeto.
CreateSolutionFolder Representa a operação de adicionar uma pasta de solução a uma solução ou a uma pasta de solução existente.
Depurar Representa a operação de depurar uma solução.
DeleteConfigurationDimensionValue Exclui um valor da dimensão de configuração (por exemplo, Configuração ou Plataforma).
Excluir Representa a operação de excluir um projeto.
DeleteSolutionConfiguration Representa a operação de remover uma configuração de solução.
Implantar Representa a operação de implantar uma solução.
DuplicateLaunchProfile Representa a operação de duplicar um perfil de inicialização existente.
Excluir Representa a operação de excluir um projeto.
Recompilar Representa a operação de recompilar uma solução.
ReloadProject Representa a operação de recarregar um projeto.
RemoveLaunchProfile Representa a operação de remover um perfil de inicialização de um projeto.
RenameFile Representa a operação de renomear um arquivo em um projeto.
RenameFolder Representa a operação de renomear uma pasta em um projeto.
RenameSolutionFolder Representa a operação de renomear uma pasta de solução.
RenomearProjeto Representa a operação de renomear um projeto.
Executar Representa a operação de executar uma solução.
RunCustomTool Representa a operação de executar uma ferramenta personalizada.
Salvar Representa a operação de salvar um projeto.
SetPropertyValue Representa a operação de definir um valor de propriedade.
SetCopyToLocal Representa a operação de definir o valor de CopyToLocal para uma referência de projeto.
SetBuildProperty Representa a operação de definir o valor de uma propriedade de compilação de configuração de projeto.
SetEvaluatedUIPropertyValue Representa a operação de definir o valor avaliado de uma propriedade visível pelo usuário.
SetLaunchProfilePropertyValue Representa a operação de definir o valor de uma propriedade exposta por meio do perfil de inicialização.
SetPackageReferenceVersion Representa a operação de renomear uma pasta de solução.
SetSolutionFolderName Representa a operação de definir um nome de pasta de solução.
SetStartupProjects Representa a operação de definir um projeto de inicialização.
SetUnevaluatedUIPropertyValue Representa a operação de definir o valor não avaliado de uma propriedade visível pelo usuário.
UnloadProject Representa a operação de descarregar um projeto.
WaitIntellisenseReady Representa a operação de aguardar o progresso da operação intellisense do projeto ou solução estar pronta.

Tipos de atualizações na consulta do projeto

Essas consultas oferecem suporte ao monitoramento de atualizações feitas nos resultados da consulta.

Termo Descrição
TrackUpdatesAsync Representa a operação de controlar as alterações em uma consulta.

Para ver alguns exemplos de consultas de projeto para tarefas comuns, consulte a Visão geral da consulta de projetos

Para obter uma extensão de exemplo que usa a API de consulta do projeto, consulte Exemplo de consulta de projeto