Recentemente, comecei a trabalhar para um novo cliente com uma antiga base de código herdada na qual existem várias soluções .net, cada uma normalmente hospeda alguns projetos exclusivos dessa solução, mas depois "empresta" / "vincula" (adiciona projeto existente) outros projetos que tecnicamente pertence a outras soluções (pelo menos se você seguir a estrutura de pastas no TFS)
Eu nunca vi uma configuração tão entrelaçada, não há uma ordem de compilação clara, às vezes um projeto na solução A apenas dlls de referência diretamente do diretório de saída de um projeto hospedado na solução B, às vezes o projeto foi incluído diretamente, mesmo que resida Muito longe na estrutura da pasta.
Parece que tudo foi otimizado para preguiça do desenvolvedor.
Quando os confrontei por que eles não tinham um servidor de IC, eles responderam que é difícil configurar o código organizado como ele é. (Estou configurando agora e xingando essa organização de código)
As soluções são organizadas em torno de artefatos de implantação (as coisas que precisam ser implantadas juntas estão na mesma solução), o que eu acho que é uma decisão sábia, mas o conteúdo dessas soluções (os projetos) está em todo lugar.
Existe um consenso de uma prática recomendada a ser usada ao reutilizar bibliotecas de classes comuns em várias soluções / artefatos de implantação,
- Como estruturar o código no VCS
- Como facilitar o compartilhamento da lógica de negócios entre artefatos de implementação separados
fonte
Na verdade, organizei estruturas TFS como a que você mencionou e, apesar de apresentar desafios únicos para a CI, possui vários benefícios diferentes. Uma clara é que ela suporta e incentiva a componenteização adequada em projetos .NET separados e, portanto, oferece suporte a um bom TDD, incentivando 100% da cobertura do teste. Logo de cara, noto alguns problemas que você pode resolver.
Referências binárias à saída de outros diretórios não são uma boa abordagem e se tornam ruins quando mescladas com referências de projeto. Tente fazer uma ou outra, alterando preferencialmente suas referências binárias para referências de projeto para obter consistência, no mínimo. Nesse ponto, cada solução pode representar um único aplicativo ou camada de aplicativo montável (por exemplo, SuperApp.sln, OtherAppServices.sln, OtherAppPresentationTier.sln).
Para criar TODOS os projetos, recomendo a criação de uma solução mestre também. A Master Solution terá referências de projeto a tudo e existe essencialmente para o único benefício de ter um único comando de compilação que lida com todos os projetos no conjunto de aplicativos. Os desenvolvedores não devem usar a Solução Mestre para desenvolvimento ativo ou depuração. Isso facilita a montagem dos artefatos de construção.
A implantação pode ser feita com um lote simples, powershell ou script Perl. Essencialmente, isso criará a solução apropriada ou a solução Master e, em seguida, implantará tudo nos ambientes adequados. Isso pode ser facilmente integrado a qualquer servidor de IC, se feito corretamente.
Crie um projeto para lógica de negócios comum ou tenha uma separação melhor de preocupações para uma lógica de negócios mais global ou universal. Todas as soluções implementáveis que desejam fazer referência a isso devem fazer isso por uma referência de projeto.
Ao organizar seu código no TFS, fica mais fácil conseguir isso mantendo projetos comuns ou compartilhados em um nível mais alto na árvore de diretórios.
fonte