Gerenciando pacotes NuGet internos com acesso ao código-fonte

20

Temos muitas bibliotecas internas que gostaríamos de compartilhar entre projetos dentro da empresa. Estes são alguns dos requisitos:

  • as fontes da biblioteca são armazenadas em repositórios separados dos projetos finais
  • os projetos finais incluem bibliotecas via NuGet
  • deve ser possível inspecionar facilmente o código fonte para qualquer biblioteca enquanto trabalha em um projeto final

Configurar nosso repositório NuGet privado não é um problema, mas gerenciar fontes é. Tentamos expor as fontes via servidor de origem e meio que funciona, mas não exatamente: o VS baixa as fontes durante a depuração de código externo, mas não quando você tenta navegar para a definição / implementação. Basicamente, você só pode acessar o código-fonte durante a depuração, o que não é exatamente o que precisamos.

Então, as perguntas são:

  • que maneiras existem para fornecer acesso ao código fonte das bibliotecas internas sem a necessidade de ter o código no mesmo repositório / solução
  • existe uma maneira de configurar o combo Symbol server / NuGet feed para que o VS use os símbolos para navegação, não apenas para depuração?

Usar o ReSharper / outros suplementos é uma opção.

Dyppl
fonte
2
Achamos o uso do Nuget para gerenciar projetos internos abaixo do ideal; nós finalmente o extraímos em favor de referências de projeto e DLL. Eu adoraria ouvir alguém que foi capaz de fazer isso funcionar.
Robert Harvey
Você também configurou um servidor de símbolos para os arquivos pdb que correspondem às DLLs contidas nos pacotes do NuGet?
precisa
3
Temos exatamente a mesma configuração no meu local de trabalho atual. Servidor NuGet (contém DLLs sem PDBs) mais servidor de símbolos (contém DLLs, PDBs e fontes). Também temos o mesmo problema (fontes e PDBs recuperados apenas durante a depuração). @RobertHarvey: O NuGet Package Manager é um cliente NuGet ruim. Não diferencia entre dependências diretas e transitórias e requer ações tolas de "consolidação". Mudamos para Paket e nunca mais olhamos para trás desde então. Tornou o gerenciamento de pacotes sadio e suportável, quase agradável.
Allon Guralnek
2
Eu tenho que perguntar - embora eu não ache que esse seja um requisito irracional - por que você precisa procurar nos pacotes compartilhados / comuns? Em particular, pelo menos, essas devem ser caixas pretas documentadas e a necessidade de olhar para dentro deve ser a exceção e não a norma. De qualquer forma, eles estão disponíveis no repositório de origem e, portanto, deve ser razoavelmente trivial fazer o download da solução para inspeção. Eu posso ver várias razões pelas quais isso ou partes dele podem não ser inteiramente o caso, mas ainda vale a pena perguntar.
Murph
4
@ Murph - Eu não sou o OP, mas na minha experiência a documentação nunca captura os detalhes que eu quero. Preciso limpar esse estado ou o receptor será chamado? O que exatamente isso está escapando? Como essas sobrecargas diferem? Essas entidades apoiam a igualdade e, em caso afirmativo, com base no quê? Qual a complexidade aproximada dessa ligação? A única documentação detalhada que vale a pena ter é a fonte (limpa), porque sempre e sempre haverá coisas que o documentador nunca considerou, mas que são importantes para você. Pior, a documentação complexa inevitavelmente contém erros e fica obsoleta.
Eamon Nerbonne

Respostas:

1

O que deve funcionar é simplesmente verificar o código-fonte do pacote NuGet e abrir a solução em uma instância separada do Visual Studio.

O Visual Studio tem um truque para alternar entre códigos em instâncias abertas, trabalhando com o que você referenciou. A primeira vez que isso aconteceu comigo enquanto eu estava depurando, foi uma revelação.

O principal problema que você enfrenta é garantir que o código de saída do pacote dependente represente a mesma versão da sua referência do NuGet no projeto principal. Não é um problema se você seguir uma política de criar sempre a versão mais recente do seu pacote.

Outro benefício dessa abordagem é que, se o pacote precisar mudar, você poderá fazer a alteração ali e depois.

Stewart Ritchie
fonte
2
Você pode fornecer alguns detalhes adicionais sobre como fazer isso funcionar? Não funciona da maneira que você descreveu para mim. Você precisa incluir PDBs no pacote? Algum truque adicional?
Dippl 04/11
-1

Talvez você possa usar https://github.com/GitTools/GitLink . Ele adiciona um link no arquivo pdb que aponta para o repositório, para que o Visual Studio busque o código-fonte a partir daí - basta incluir o arquivo pdb no pacote nuspec e não precisará de um servidor de origem.

Jesper Balle
fonte
1
Porém, funciona fora da depuração? Não parece.
Dyppl
-1

Portanto, não é uma solução perfeita, mas você menciona que pode opcionalmente usar o Resharper; com dotPeek e re-sharper, você pode navegar até a desmontagem do código original, é o que eu uso no trabalho, onde temos uma configuração semelhante à sua.

Acho que uma combinação do Symbol Server que você mencionou e navegar pela desmontagem são normalmente suficientes para descobrir o que está acontecendo.

Espero que ajude.

Edit: Depois de reler sua pergunta, percebo que você pede especificamente para poder navegar no código-fonte, o que não é. No entanto, espero que seja útil para alguém.

BaronVonDrew
fonte