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.


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.


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.


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.

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.