Vários aplicativos em uma única solução do Visual Studio [fechada]


17

Estou trabalhando para uma empresa que deseja reunir todos os aplicativos .Net (aplicativos Web, aplicativos Windows e aplicativos de console) juntos em uma única solução do Visual Studio.

Estou procurando experiência de desenvolvedores que estruturam seus próprios aplicativos dessa maneira ou que trabalham em uma empresa que faz isso. isso é uma boa ideia?

  • Quais são os prós / contras de colocar todos os seus aplicativos em uma única solução, em vez de ter soluções separadas para cada aplicativo?

  • Qual a velocidade do Visual Studio com uma solução de mais de 20 projetos?

  • E quão estável é o arquivo de solução com desenvolvimento simultâneo controlado por fonte?


Lembre-se de que as respostas podem ser específicas para versões específicas do Visual Studio.
stakx

Respostas:


21

Recentemente, migramos quase todo o código fonte da minha empresa para uma única solução.

Por quê?

Originalmente, tínhamos dezenas de soluções. Alguns projetos de uma solução reutilizaram projetos de outro e ninguém se preocupou em usar um gerenciador de pacotes. No dia em que você altera substancialmente um projeto usado em quase todos os lugares, espera horas e horas de trabalho perdido para toda a empresa nos próximos dias ou semanas. A pior parte é que você nem sabe o que exatamente seria afetado pela mudança.

Mesclar todo o código em uma solução era uma alternativa. Funciona bem no momento, e as dependências agora são fáceis de seguir. Deseja modificar um método, mas também acompanhar as repercussões que essa alteração pode ter em qualquer lugar da base de código? O Visual Studio pode fazer isso com facilidade. Para mim, é um sucesso.

Agora, a integração contínua também é mais fácil. Uma solução para compilar e implantar. Quase nada para configurar.

É escalável?

Em termos de desempenho, fiquei muito surpreso com o Visual Studio . Eu pensei que ele começaria a chorar com uma solução com, digamos, 50 projetos. Hoje, existem mais de 200 projetos; O Visual Studio parecia ser escalável o suficiente para gerenciá-los como se houvesse apenas 20 deles. Sim, há coisas que levam tempo. Se você recompilar todos os projetos, com contratos de código, análise de código ativada por padrão etc., espere que demore um pouco. Mas ninguém esperaria compilar 200 projetos tão rapidamente quanto 10 e, a propósito, você não deveria: esse é o papel do servidor de integração contínua. O tempo de inicialização (inicialização a frio e carregamento da solução) é impressionantemente rápido ; talvez não seja tão rápido quanto em 10 projetos, mas ainda seja muito aceitável (menos de 20 segundos em uma máquina comprada há mais de cinco anos).

Para ir ainda mais longe, o descarregamento sistemático de projetos é uma boa ideia (e muito fácil quando os projetos são organizados em diretórios na solução). Se alguém trabalha em algo que exige que apenas três projetos sejam carregados, não há necessidade de carregar todos os 200 projetos (a menos que, é claro, as dependências possam ser afetadas).

O controle de versão também funciona como esperado (estou usando um servidor SVN, se for o caso). Não trabalhei em um ambiente simultâneo real, com, digamos, dezenas de desenvolvedores frequentemente comprometendo código, mas imagino que isso não tenha muitos problemas. Apenas tenha cuidado com os casos em que muitos desenvolvedores adicionam novos projetos ao mesmo tempo: mesclar o arquivo .sln não é a coisa mais fácil de fazer.

Conclusão

Se eu tivesse que escolher a decisão novamente:

  1. Eu ainda migraria tudo para uma única solução. Isso reduz enormemente a dor de dependências quebradas, e esse benefício por si só vale totalmente a pena. Ter um local centralizado para todo o código também é uma boa ideia; isso possibilita, por exemplo, procurar algo no Visual Studio. Também posso trabalhar em dois projetos fracamente relacionados e ainda ter apenas uma janela do Visual Studio aberta.

  2. Eu também estudaria um pouco mais o NuGet e a capacidade de hospedar um servidor privado do NuGet. O gerenciamento das dependências através do NuGet pode resolver alguns dos problemas quando você não deseja mesclar alguns projetos na solução comum. Pessoalmente, não tive casos assim, mas imagino que outras empresas possam ter.

  3. Finalmente, investir em um SSD para cada desenvolvedor pode fazer uma enorme diferença. Mas você não precisa e, no meu caso, a base de código ainda está armazenada em um disco rígido comum.


2
Apenas alguns pontos FYI: Você também pode abrir projetos via arquivo .csproj no VS se a velocidade / desempenho for um problema. Um "servidor privado" do NuGet é apenas uma pasta de rede (e adicione essa pasta como um local de origem do pacote no VS) - basta soltar os arquivos nupkg e ele funciona.
Steven Evers

Obrigado, MainMa, por compartilhar suas experiências com uma única configuração de solução; uma resposta muito detalhada e útil. Uma reserva que tenho é a de ter todos os aplicativos juntos em uma solução, ter que dar a um desenvolvedor júnior acesso a tudo. Usamos o Ankhsvn e eu prefiro fornecer a um desenvolvedor júnior a URL para um único aplicativo em que quero que ele trabalhe do que dar acesso a tudo. Alguma idéia sobre isso?
precisa saber é o seguinte

@BruceHill: com o SVN, você pode configurar com precisão quem tem acesso a quê. O desenvolvedor júnior ainda poderá ver todos os diretórios raiz (veja minha pergunta sobre Falha no servidor ), mas não poderá acessar projetos restritos.
Arseni Mourzenko

2
Trabalhando para algumas grandes empresas com grandes equipes de desenvolvedores que enviam código diariamente, posso dizer que a abordagem de solução única não funciona. Cada projeto é indireto. Carregar, construir e Deus sabe que etapas pré / pós-construção alguém pode ter anexado a esses projetos. Agora, com uma grande equipe de desenvolvedores, você terá alterações em muitos desses projetos a cada dia. Inclua testes de unidade em execução etc. em cada check-in para integração contínua e você terá ainda mais despesas gerais. Tenha uma solução única por unidade implantável (serviço, site) e use um gerenciador de pacotes como o NuGet.
Sempre aprendendo

8

Este é o uso pretendido.

Quais são os prós / contras de colocar todos os seus aplicativos em uma única solução, em vez de ter soluções separadas para cada aplicativo?

  • profissionais:
    • referências mais fáceis entre projetos
    • depuração / passo mais fáceis
    • mais fácil de anexar aos processos (ou seja, você está percorrendo um serviço do Windows, quando ele salta para o código da biblioteca compartilhada, e simplesmente funciona porque todos os símbolos já estão carregados e contabilizados)
    • A pesquisa de código no IDE funciona melhor (você não precisa necessariamente saber em qual projeto o código que está procurando reside)
    • as listas de alterações entre projetos são mais fáceis de gerenciar (ou seja, você alterou o código da biblioteca, portanto, é necessário atualizar o código do cliente ao mesmo tempo, com 1 check-in)
  • contras:
    • velocidade de construção: se você tem o hábito de "reconstruir tudo", as construções demoram mais. Por muito mais tempo, e construções incrementais às vezes têm um comportamento estranho.
    • velocidade ide: veja a próxima

Qual a velocidade do Visual Studio com uma solução de mais de 20 projetos?

Com mais de 20 projetos ... pode não ser tão ruim. Vi mais sem o VS ter problemas. É bem estável / rápido. NO ENTANTO ... se for um problema, pode ser mitigado: abra o .csproj no VS e trabalhe a partir daí. Você não obtém os benefícios de ter tudo em uma solução, mas sempre pode reabrir o sln quando precisar e trabalhar apenas no .csproj quando precisar (como faz agora).

E quão estável é o arquivo de solução com desenvolvimento simultâneo controlado por fonte?

O arquivo de solução muda apenas quando você adiciona / remove projetos ou objetos no nível da solução, portanto, raramente muda. É xml, para que você possa ver o que há nele. Eles mudam raramente.


Steve, você disse: "Este é o uso pretendido". Você pode fornecer uma referência para isso? Obrigado!
reformada
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.