Pasta de soluções do Visual Studio como pastas reais

119

Eu tenho uma solução do Visual Studio. Atualmente, é uma solução vazia (= sem projetos) e adicionei algumas pastas de solução.

As Pastas de solução parecem ser apenas "pastas virtuais", porque não são realmente criadas no sistema de arquivos e os arquivos dentro das pastas de solução estão apenas na mesma pasta que o arquivo .sln.

Há uma configuração que esqueci que diz ao Visual Studio para tratar as Pastas de Solução como pastas "reais", isto é, criá-las no sistema de arquivos e mover arquivos para ele quando eu os movo dentro da solução para uma dessas pastas?

Edit: Obrigado. Vou fazer uma sugestão para o VS2010 então :)

Michael Stum
fonte
52
Esta é uma das peculiaridades mais irritantes do Visual Studio
Andy White
Como posso lidar corretamente com essa peculiaridade?
hellboy
Engraçado, o Rider meio que tem esse recurso (mas a pasta deve estar no mesmo caminho do arquivo .sln, e a referência da pasta real não é armazenada no próprio arquivo .sln): jetbrains.com/help/rider/Extending_Your_Solution. html
rsenna
Estou usando o VS 2017 e, pelo que posso dizer, a MS ainda não adicionou um recurso que permita adicionar pastas inteiras a uma pasta de solução - arquivos individuais devem ser adicionados.
Theo

Respostas:

43

Nenhuma configuração especial. Eu não acho que seja compatível.

Você pode criar pastas reais em um "projeto" dentro da solução, mas não na própria solução.

svlists
fonte
1
Isso ainda parece ser preciso no VS 2017.
Theo
2
... e VS 2019
motivo
uma das piores coisas sobre o VS. Por que o MS não mantém as pastas Sln como uma opção, mas TAMBÉM permite que pastas REAIS sejam adicionadas à solução. Tão irritante. O Sistema de Arquivos funciona, por que reinventar a roda (como um quadrado).
MemeDeveloper
46

uma solução alternativa que realmente se comporta conforme o esperado .

  1. Adicione um site novo ou existente à solução. (Normalmente crio um novo.)
  2. Apenas certifique-se de que ele foi criado dentro de sua pasta de solução. (Às vezes até crio um "link" para uma pasta externa, por exemplo, 'Docs' ou 'Marketing' em um compartilhamento de rede. Nesse caso, é ignorado pelo Git, é claro.)
  3. Certifique-se de ir para as configurações de "Projeto" ou Gerenciador de configuração para excluir este "Web Site" de Build and Deploy !

Feito. Agora, o Solution Explorer refletirá qualquer mudança no sistema de arquivos e vice-versa (incluindo subpastas).

Eu (sinto falta) uso-o para especificações, documentos, PM e alguns scripts DevOps que são compartilhados dentro da equipe. É fácil escolher o que incluir no controle de origem ou não e (se configurado corretamente) não entra em conflito com o build.

Eu sei que o recurso não se destina a esse caso de uso, mas exceto pelo ícone "Projeto" talvez enganoso, não encontrei nenhuma escassez para esse hack ainda. E ainda há casos de uso em que as pastas de solução clássicas (virtuais) que o VS fornece se encaixam na imagem. O que você acha?

Michael
fonte
4
Aqui estão as instruções completas: Clique com o botão direito na solução -> "Adicionar" -> "Novo Web Site ..." -> (eu escolhi "ASP.NET Empty Web Site"). Depois de alterar a localização, não se esqueça de acrescentar "\ MeuNome" ao caminho, caso contrário, clicar em "OK" simplesmente reabrirá a caixa de diálogo. Depois disso, clique com o botão direito na sua solução -> "Propriedades" -> "Propriedades de configuração" -> desmarque "Construir" para o projeto da web.
user764754
Ainda está funcionando? usando VS2015, mas não funciona.
Jan Paolo Go
No VS2017 cria perfeitamente uma pasta real, mas o ícone do WebSite (círculo escuro) exibido no Solution Explorer. Alguém sabe como consertar isso?
Andrei Karcheuski
Sim, funciona no VS2019, mas ainda não monitora mudanças no sistema de arquivos. Você deve ocasionalmente "Atualizar" para ver os arquivos atuais. Se ao menos os projetos em C # não fossem o único tipo de solução a suportar o novo .*projformato baseado em sistema de arquivos, mais limpo e claro .
Shannon
32

No Visual Studio 2017, clique no ícone "Soluções e pastas" na janela do Solution Explorer. Este botão alterna da visualização virtual da "solução" para uma "visualização do código-fonte" que corresponde ao layout das pastas e arquivos no sistema de arquivos. Quando você adiciona uma nova pasta, a pasta é criada fisicamente no local esperado. soluções e pastas.

OdeToCode
fonte
Isso é útil, mas na "visualização do código-fonte" você perdeu todos os atalhos do botão direito em um projeto, ou seja, "Gerenciar pacotes NuGet".
David Liang
1
Por que apenas soluções ou projetos C ++ se comportam de maneira diferente em comparação com outras linguagens?
Friendly Ghost
Isso me ajudou, então criei uma pasta na visualização de pastas onde eu queria, depois adicionei uma pasta de solução e adicionei o projeto como filho da pasta. Realmente não faz sentido para mim, mas essa resposta me ajudou
hanzolo
Isso é exatamente o que eu quero. Obrigado!
user1633272
10

A resposta escolhida sugere que seria possível usar projetos reais em vez de pastas de solução, mas não explica realmente como. Acho que o que estou descrevendo aqui é possivelmente a maneira menos estranha de conseguir isso ... :-P

O problema com arquivos de projeto regulares é que eles eventualmente serão compilados pelo MSBUILD. E se você quiser um projeto que contenha apenas arquivos não compiláveis, isso será um problema.

Mas, algum tempo atrás, o Visual Studio introduziu um novo tipo de projeto: Projeto Compartilhado (extensão .shproj). Este tipo de projeto não é compilado por padrão, mas apenas quando (e somente se) é referenciado por outro projeto.

Portanto, uma parte do truque aqui é usar projetos compartilhados em vez de pastas de solução . Obviamente, é possível adicionar um projeto compartilhado que nunca é referenciado por nenhum outro projeto, o que significa que podemos evitar o problema apresentado acima.

Então, usando a <None Include="**/*" />cláusula no arquivo .shproj, podemos fazer com que ele reflita automaticamente quaisquer novos arquivos e / ou subpastas.

Então, basicamente, faça o seguinte:

  • Crie uma nova pasta em sua solução.
  • Adicione um novo arquivo .shproj na raiz desta nova pasta.
  • Faça referência ao novo .shproj em sua solução.

Por exemplo, no meu caso, criei um DockerDev.shproj, para poder agrupar alguns scripts relacionados ao docker que executamos apenas em nossas máquinas de desenvolvimento:

<?xml version="1.0" encoding="utf-8"?>
<!-- DockerDev/DockerDev.shproj -->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <None Include="**/*" />
  </ItemGroup>
</Project>

Este arquivo .shproj manterá o controle de qualquer arquivo, em qualquer subpasta desta nova DockerDevpasta em minha solução.

Pelo que pude ver, esta solução funciona de forma muito semelhante ao que o OP solicitou: funcionará como uma referência não compilável para uma pasta e refletirá automaticamente quaisquer alterações feitas nela.

rsenna
fonte
Em minha experiência, isso se acumula assim que um membro desavisado da equipe toca em qualquer propriedade do arquivo; depois disso, você tem arquivos duplicados aparecendo no painel de navegação. Sob algumas condições, todo arquivo acaba enumerado no arquivo .proj e então surge a feiura. Embora eu não goste de desistir, ainda prefiro a abordagem 'Adicionar site existente'.
Shannon
@shannon Eu nunca experimentei o comportamento que você está mencionando, mas "ausência de evidência não é evidência de ausência", então é isso. Mas eu uso projetos compartilhados diariamente, então acho que isso também conta. Em relação aos projetos de sites (WSP), eles também poderiam funcionar, eu acho, faz muito tempo que não uso.
rsenna
8

Sara Ford contribuiu com uma macro para adicionar fazer isso. No Visual Studio 2010, se você abrir o Macro Explorer, verá uma macro chamada "GenerateSlnFolderOnDirStructure." Isso automatizará a criação das Pastas de solução e adicionará os arquivos.

SwampyFox
fonte
5

Pasta para pasta de solução por Cecilia Wirén - CeciliaSHARP

Elimine o incômodo de adicionar vários arquivos à pasta da solução. Basta usar o menu de contexto para a solução e logo abaixo da opção de criar uma nova pasta de solução você encontra agora 'Adicionar pasta como pasta de solução'. Isso criará uma pasta de solução com o mesmo nome que você selecionou e adicionará os itens dentro dessa pasta à pasta de solução. Isso não moverá os arquivos no disco.

Ryan
fonte
3

Não, não é compatível. Como você suspeitou, as pastas de solução são simplesmente subentradas virtuais no arquivo .sln, nada a ver com o sistema de arquivos.

Alan
fonte
3

O Visual Studio não tem suporte para isso. Eu fiz uma extensão que faz algo semelhante para o VS2013. Ele mapeia pastas de solução para pastas físicas em seu disco rígido, embora o mapeamento seja uma forma (do disco rígido para a solução). Isso significa que o conteúdo de uma pasta de solução refletirá o conteúdo da pasta do disco rígido, e não o contrário.

Com isso fora do caminho, a extensão ainda pode ser útil. Ele tem suporte para mapear pastas de solução para pastas físicas, filtrar arquivos e diretórios com base em regex e lembrar mapeamentos em seu arquivo .sln. As propriedades não são intrusivas, portanto, os desenvolvedores sem a extensão ainda podem abrir o sln e não serem afetados.

Hospedado na galeria do Visual Studio: https://visualstudiogallery.msdn.microsoft.com/69e19ea6-4442-4cb6-b300-044dd21f02bd

Editar: Carregado para bitbucket. Agora, código aberto. Licença do MIT. https://bitbucket.org/LSS_NorthWind/physical-solution-folders

Vento Norte
fonte
3

Nota: Sim, é possível, você pode criar uma pasta na raiz, mas é um pouco complicado ....

Dando alguns esforços extras, você pode fazer isso. Como? Vamos seguir a etapa -

  • 1-Crie uma pasta, por exemplo: " newfolder " na raiz (onde reside o seu arquivo .sln).
  • 2.Copie e cole seus projetos dentro da pasta.
  • 3. vá para seu arquivo sln e encontre projetos movidos e anexe newfolder \ no endereço do projeto movido.
  • 4.Salve o arquivo sln.
  • 5. Abra seu projeto e comprometa o repositório no git ou assim ...
  • 6. Pegue o repositório em um local novo.

    Você terminou...

se ainda assim você não conseguir ver sua pasta -----

  • 1. Adicione uma pasta de solução xyz.
  • 2. Abra o arquivo sln e altere o nome da pasta com o seu nome de pasta.

Parabéns, você terminou ..

Se você enfrentar qualquer problema, escreva-me para obter ajuda ..

Ankit
fonte
3

Crie uma "pasta de soluções". Isso criará uma pasta lógica, mas não uma pasta física. Clique com o botão direito na pasta da solução e abra uma nova caixa de diálogo do projeto. Mas antes de clicar em OK, você deve alterar a localização de um projeto para a pasta física desejada e o VS irá criá-la e colocar o projeto dentro.

rc21
fonte
1

Você pode adicionar pastas reais escolhendo "Adicionar novo filtro" para um arquivo de projeto do Visual Studio. Você também pode fazer "Adicionar novo filtro" em uma pasta existente. Assim que a pasta for criada, renomeie-a e adicione o arquivo de origem ou de cabeçalho ou o que for mais adequado ao seu projeto. Essa é uma maneira que conheço que nos permite criar pastas reais por meio do IDE do Visual Studio.

Abhijit K Rao
fonte
Este recurso é específico para projetos C ++.
Tamir Daniely,
Esta solução também se aplica a projetos VS - a questão é sobre as pastas de nível de solução.
Theo
0

A pasta criada embaixo da solução será virtual conforme dito. Talvez isso possa ser chamado de solução alternativa, mas você pode criar fisicamente a pasta no disco antes ou quando adicionar um novo item / projeto e Robert deve ser irmão do seu pai.

ps- em olhar mais atento, talvez eu deva explicar "Bob é seu tio" significa que você está bem / classificado.

pomba
fonte
Faz diferença se Robert é irmão de sua mãe?
Darrel Lee
0

Eu mesma desejei esse recurso algumas vezes, mas no final do dia, você realmente NÃO quer a capacidade de fazer isso. Pense na sua Solução (arquivo) como a raiz de um aplicativo da web e nas pastas da Solução como Diretórios Virtuais (literal e funcionalmente). O conteúdo de um diretório virtual da web pode estar fisicamente em um servidor totalmente diferente. O Visual Studio confundiu o conceito de pastas de solução ao permitir que você crie novos arquivos dentro da pasta. Você deve sempre "Adicionar existente" ao adicionar conteúdo. Quando você adiciona existente, ele cria um link para o local de origem do arquivo.

Mas o motivo pelo qual você não deseja que as pastas de solução se comportem como pastas "físicas" é porque seu layout de solução pode não usar necessariamente a mesma convenção que seu layout de controle de origem. As pastas de solução permitem que você personalize a hierarquia de seus projetos para que você possa agrupar projetos e itens da maneira que quiser e, em seguida, decidir que não gosta e alterá-lo novamente sem ter que passar pelo pesadelo de mover itens de controle de origem ao redor e irritando o resto de sua equipe.

Paul Easter
fonte
1
Esta é a resposta certa - crie o arquivo no disco em uma pasta com o mesmo nome da pasta virtual, então adicione o arquivo no VS usando 'Adicionar existente'.
Richard
4
Eles poderiam ter facilmente implementado pastas virtuais e físicas. É claramente um esquecimento. Consulte a referência: todos os outros IDE, sempre.
Tamir Daniely,
6
Não entendo por que o conceito de Diretórios Virtuais (IIS) tem algo a ver com pastas de solução. Quanto ao argumento do controle de origem, não vejo o problema. Por que as movimentações de arquivo irritam o resto da equipe? É uma operação comum. E por que você deseja que o layout dos arquivos no controle de origem seja diferente do layout físico?
user247702
2
Pastas de solução físicas tornaria mais fácil (embora apenas um pouco) para criar estruturas de pastas modernos como NancyFx do , onde vários projectos se enquadram em categorias como src, test, tools, etc. Você definitivamente querer tomar essa decisão no início do projeto para o seu ponto sobre irritando a equipe, mas isso é verdade para quase todas as decisões arquitetônicas.
Eric Eskildsen
3
-1 Meu caso de uso é o seguinte: às vezes queremos apenas adicionar certos documentos à solução. Eles não serão construídos, mas são mantidos no controle de origem. Normalmente temos uma pasta especial para eles. Eu gostaria de ter essa pasta em minha solução - não os arquivos que ela contém, mas a própria pasta. Sim, existem maneiras de contornar essa limitação, mas não são ideais. Ter uma referência real a uma pasta na solução simplesmente funcionaria.
rsenna
0

Eu tenho uma pequena alternativa para isso (não é ótimo, mas funciona).

  1. Crie uma pasta em sua solução (ou seja, "Contoso")
  2. Clique com o botão direito na solução e clique em "Abrir Pasta no Gerenciador de Soluções"
  3. Crie a pasta física (ou seja, "Contoso") no diretório da solução
  4. Copie / crie arquivos na pasta física.
  5. Arraste os arquivos para a pasta virtual no gerenciador de soluções.

Não é ótimo porque você precisará manter manualmente as referências do arquivo, mas funciona para mim.

Matthew Layton
fonte