Compartilhar via


Aninhamento de arquivos no Gerenciador de Soluções

O Gerenciador de Soluções aninha arquivos relacionados para ajudar a organizá-los e torná-los mais fáceis de localizar. Por exemplo, se você adicionar um formulário do Windows Forms a um projeto, o arquivo de código do formulário será aninhado abaixo do formulário no Gerenciador de Soluções. Em projetos .NET Core (e .NET 5 e posterior), o aninhamento de arquivos pode ser dado um passo adiante. Você pode escolher entre as predefinições de aninhamento de arquivos Desativado, Padrão e Web. Você também pode personalizar como os arquivos são aninhados ou criar configurações específicas da solução e específicas do projeto.

Observação

No Visual Studio 2022 versão 17.2 e anteriores, esse recurso só tinha suporte para projetos do ASP.NET Core. A partir da versão 17.3, todos os projetos direcionados ao .NET suportam o aninhamento de arquivos.

Opções de aninhamento de arquivo

Botão para ativar/desativar o aninhamento de arquivos

As opções disponíveis para aninhamento de arquivo não personalizado são:

  • Desativado: essa opção oferece uma lista simples de arquivos sem nenhum aninhamento.

  • Padrão: essa opção fornece o comportamento de aninhamento de arquivo padrão no Gerenciador de Soluções. Se não houver configurações para um determinado tipo de projeto, nenhum arquivo no projeto será anexado. Se houver configurações (por exemplo, para um projeto Web), o aninhamento será aplicado.

  • Web: Essa opção aplica o comportamento de aninhamento de arquivo Web a todos os projetos na solução atual. Ele tem inúmeras regras, e nós encorajamos você a verificar e nos dizer o que você pensa. A captura de tela a seguir realça apenas alguns exemplos do comportamento de aninhamento de arquivo que você obtém com esta opção:

    Aninhamento de arquivos no Explorador de Soluções

Personalizar aninhamento de arquivo

Se você não gosta do que vem pronto, pode criar suas próprias configurações personalizadas de aninhamento de arquivos que instruem o Gerenciador de Soluções a aninhar arquivos. Você pode adicionar quantas configurações de aninhamento de arquivo personalizadas desejar e alternar entre elas conforme desejado. Para criar uma nova configuração personalizada, você pode começar com um arquivo vazio ou usar as configurações da Web como ponto de partida:

Adicionar regras personalizadas de aninhamento de arquivos

Recomendamos que você use as configurações da Web como ponto de partida porque é mais fácil trabalhar com algo que já funciona. Se você usar as configurações da Web como ponto de partida, o arquivo .filenesting.json será semelhante ao seguinte arquivo:

Usar regras de aninhamento de arquivo existentes como base para configurações personalizadas

Vamos nos concentrar no nó dependentFileProviders e em seus nós filhos. Cada nodo filho é um tipo de regra que o Visual Studio pode usar para aninhar arquivos. Por exemplo, ter o mesmo nome de arquivo, mas uma extensão diferente é um tipo de regra. As regras disponíveis são:

  • extensionToExtension: use esse tipo de regra para aninhar file.js em file.ts

  • fileSuffixToExtension: use esse tipo de regra para aninhar file-vsdoc.js em file.js

  • addedExtension: use esse tipo de regra para aninhar file.html.css em file.html

  • pathSegment: use esse tipo de regra para aninhar jquery.min.js em jquery.js

  • allExtensions: use esse tipo de regra para aninhar o arquivo.* em file.js

  • fileToFile: Use esse tipo de regra para aninhar bower.json em .bowerrc

O provedor extensionToExtension

Esse provedor permite definir regras de aninhamento de arquivos usando extensões de arquivo específicas. Considere o seguinte exemplo:

Regras de exemplo extensãoParaExtensão

Efeito de exemplo extentionToExtension

  • cart.js está aninhada sob cart.ts devido à primeira regra extensionToExtension

  • cart.js não está aninhado em cart.tsx porque .ts vem antes .tsx nas regras, e só pode haver um pai

  • light.css está aninhado dentro de light.sass devido à segunda regra extensionToExtension

  • home.html está aninhado em home.md devido à terceira regra extensionToExtension

O provedor "fileSuffixToExtension"

Esse provedor funciona exatamente como o provedor extensionToExtension , com a única diferença é que a regra examina o sufixo do arquivo em vez de apenas a extensão. Considere o seguinte exemplo:

Regras de exemplo fileSuffixToExtension

Efeito de exemplo fileSuffixToExtension

  • portal-vsdoc.js está aninhada em portal.js devido à regra fileSuffixToExtension

  • todos os outros aspectos da regra funcionam da mesma maneira que extensionToExtension

O provedor de extensão adicionada

Esse provedor aninha arquivos com uma extensão adicional no arquivo sem uma extensão adicional. A extensão adicional só pode aparecer no final do nome de arquivo completo.

Considere o seguinte exemplo:

regras de exemplo addedExtension

Efeito de exemplo de extensão adicionada

  • file.html.css está aninhada em file.html devido à regra addedExtension

Observação

Você não especifica nenhuma extensão de arquivo para a addedExtension regra; ela se aplica automaticamente a todas as extensões de arquivo. Ou seja, qualquer arquivo com o mesmo nome e extensão que outro arquivo mais uma extensão adicional no final é aninhado no outro arquivo. Você não pode limitar o efeito desse provedor a apenas extensões de arquivo específicas.

O provedor pathSegment

Esse provedor aninha arquivos com uma extensão adicional em um arquivo sem uma extensão adicional. A extensão adicional só pode aparecer no meio do nome de arquivo completo.

Considere o seguinte exemplo:

Regras de exemplo para

Efeito de exemplo de pathSegment

  • jquery.min.js está aninhado sob jquery.js devido à regra pathSegment

Observação

  • Se você não especificar extensões de arquivo específicas para a pathSegment regra, ela se aplicará a todas as extensões de arquivo. Ou seja, qualquer arquivo com o mesmo nome e extensão que outro arquivo mais uma extensão adicional no meio é aninhado sob o outro arquivo.

  • Você pode limitar o efeito da pathSegment regra a extensões de arquivo específicas especificando-as da seguinte maneira:

    "pathSegment": {
        "add": {
          ".*": [
            ".js",
            ".css",
            ".html",
            ".htm"
          ]
        }
    }
    

O provedor allExtensions

Esse provedor permite definir regras de aninhamento de arquivos para arquivos com qualquer extensão, mas com o mesmo nome de arquivo base. Considere o seguinte exemplo:

Regras de exemplo de allExtensions

Efeito de exemplo do allExtensions

  • template.cs e template.doc estão aninhados sob template.tt devido à regra allExtensions .

O provedor FileToFile

Esse provedor permite definir regras de aninhamento de arquivos com base em nomes de arquivo inteiros. Considere o seguinte exemplo:

Regras de exemplo fileToFile

Exemplo de efeito fileToFile

  • .bowerrc está aninhado sob bower.json devido à regra fileToFile

Ordem das regras

A ordenação é importante em todas as partes do arquivo de configurações personalizadas. Você pode alterar a ordem na qual as regras são executadas movendo-as para cima ou para baixo dentro do nó dependentFileProvider . Por exemplo, se você tiver uma regra que torna file.js pai de file.ts e outra regra que torna file.coffee o pai de file.ts, a ordem na qual eles aparecem no arquivo determina o comportamento de aninhamento quando todos os três arquivos estão presentes. Como file.ts só pode ter um pai, qualquer regra que executar primeiro vence.

A ordenação também é importante para seções de regra em si, não apenas para arquivos em uma seção. Assim que um par de arquivos for correspondido com uma regra de aninhamento de arquivo, outras regras mais abaixo no arquivo serão ignoradas e o próximo par de arquivos será processado.

Botão de aninhamento de arquivos

Você pode gerenciar todas as configurações, incluindo suas próprias configurações personalizadas, por meio do mesmo botão no Gerenciador de Soluções:

Ativar regras de aninhamento de arquivos personalizados

Criar configurações específicas do projeto

Você pode criar configurações específicas da solução e específicas do projeto por meio do menu de clique com o botão direito do mouse (menu de contexto) de cada solução e projeto:

Regras de aninhamento específicas da solução e do projeto

As configurações específicas da solução e específicas do projeto são combinadas com as configurações ativas do Visual Studio. Por exemplo, você pode ter um arquivo de configurações específico do projeto em branco, mas o Gerenciador de Soluções ainda está agrupando arquivos. O comportamento de aninhamento origina-se das configurações específicas da solução ou das do Visual Studio. A precedência para mesclar configurações de aninhamento de arquivos é: Visual Studio > Solução > Projeto.

Você pode configurar o Visual Studio para usar apenas as configurações específicas da solução ou do projeto, definindo o nó raiz para true. O Visual Studio interrompe a mesclagem de arquivos nesse nível e não o combina com arquivos superiores à hierarquia.

As configurações específicas da solução e específicas do projeto podem ser verificadas no controle do código-fonte e toda a equipe que trabalha na base de código pode compartilhá-las.

Desabilitar regras de aninhamento de arquivo para um projeto

Você pode desabilitar regras de aninhamento de arquivos globais existentes para soluções ou projetos específicos usando a ação de remoção para um provedor em vez de adicionar. Por exemplo, se você adicionar o seguinte código de configurações a um projeto, todas as regras pathSegment que podem existir globalmente para este projeto específico serão desabilitadas:

"dependentFileProviders": {
  "remove": {
    "pathSegment": {}
  }
}