Administrar paquetes NuGet internos con acceso al código fuente

20

Tenemos muchas bibliotecas internas que nos gustaría compartir entre proyectos dentro de la empresa. Estos son algunos de los requisitos:

  • las fuentes de la biblioteca se almacenan en repositorios separados de los proyectos finales
  • los proyectos finales incluyen bibliotecas a través de NuGet
  • debe ser posible inspeccionar fácilmente el código fuente de cualquier biblioteca mientras se trabaja en un proyecto final

Configurar nuestro repositorio privado NuGet no es un problema, pero administrar las fuentes sí lo es. Intentamos exponer las fuentes a través del servidor fuente y funciona un poco , pero no del todo: VS descarga las fuentes mientras depura el código externo, pero no cuando intenta navegar a la definición / implementación. Básicamente, solo puede ir al código fuente al depurar, que no es exactamente lo que necesitamos.

Entonces, las preguntas son:

  • qué formas existen para proporcionar acceso al código fuente de las bibliotecas internas sin la necesidad de tener el código en el mismo repositorio / solución
  • ¿Hay alguna manera de configurar el combo de alimentación del servidor de símbolos / NuGet para que VS use los símbolos para la navegación, no solo para la depuración?

Usar ReSharper / otros complementos es una opción.

Dyppl
fuente
2
Encontramos que el uso de Nuget para gestionar proyectos internos es subóptimo; finalmente lo eliminamos a favor de referencias de proyecto y DLL. Me encantaría saber de alguien que haya podido hacer que esto funcione.
Robert Harvey
¿También ha configurado un servidor de símbolos para los archivos pdb que corresponden a los dlls contenidos en sus paquetes NuGet?
RubberDuck
3
Tenemos exactamente la misma configuración en mi lugar de trabajo actual. Servidor NuGet (contiene DLL sin PDB) más servidor de símbolos (contiene DLL, PDB y fuentes). También tenemos el mismo problema (las fuentes y los PDB se recuperan solo al depurar). @RobertHarvey: NuGet Package Manager es un cliente pobre de NuGet. No diferencia entre dependencias directas y transitorias y requiere acciones tontas de "consolidación". Nos cambiamos a Paket y nunca he vuelto a mirar atrás. Hizo que la gestión de paquetes fuera sensata y soportable, casi linda.
Allon Guralnek
2
Tengo que preguntar, aunque no creo que sea un requisito irrazonable, ¿por qué necesita poder buscar en los paquetes compartidos / comunes? Nocionalmente, al menos, estos deberían estar documentados en recuadros negros y la necesidad de mirar dentro debería ser la excepción y no la norma. En cualquier caso, están disponibles en su repositorio fuente y, por lo tanto, debería ser bastante trivial descargar la solución para inspeccionarla. Puedo ver una serie de razones por las cuales esto o partes de esto podrían no ser completamente el caso, pero vale la pena preguntar.
Murph
44
@Murph: no soy el OP, pero en mi experiencia la documentación nunca captura los detalles que quiero. ¿Necesito limpiar este estado o la persona que llama? ¿Qué es exactamente esta escapando? ¿Cómo difieren estas sobrecargas? ¿Estas entidades apoyan la igualdad y, en caso afirmativo, en función de qué? ¿Cuál es la complejidad aproximada de esta convocatoria? La única documentación detallada que vale la pena tener es la fuente (limpia), porque siempre y siempre habrá cosas que el documentalista nunca consideró, pero que son importantes para usted. Peor aún, la documentación compleja inevitablemente contiene errores y se vuelve obsoleta.
Eamon Nerbonne

Respuestas:

1

Lo que debería funcionar es simplemente verificar el código fuente del paquete NuGet y abrir la solución en una instancia separada de Visual Studio.

Visual Studio tiene un buen truco para cambiar entre código en instancias abiertas al resolver lo que ha mencionado. La primera vez que esto me sucedió mientras estaba depurando fue una revelación.

El principal problema que enfrenta es asegurarse de que el código extraído para el paquete dependiente represente la misma versión que su referencia NuGet en el proyecto principal. No es un problema si sigues una política de siempre construir contra la versión más reciente de tu paquete.

Otro beneficio de este enfoque es que si el paquete necesita cambiar, puede hacer el cambio allí y luego.

Stewart Ritchie
fuente
2
¿Puede proporcionar algunos detalles adicionales sobre cómo hacer que esto funcione? No funciona de la manera que me describiste. ¿Necesita incluir PDB en el paquete? ¿Algún truco adicional?
Dyppl
-1

Tal vez pueda usar https://github.com/GitTools/GitLink . Agrega un enlace en el archivo pdb que apunta al repositorio para que Visual Studio obtenga el código fuente desde allí, y luego solo necesita incluir el archivo pdb en su paquete nuspec y no necesitará un servidor fuente.

Jesper Balle
fuente
1
Sin embargo, ¿funciona fuera de la depuración? No se ve como lo hace.
Dyppl
-1

Por lo tanto, no es una solución perfecta, pero usted menciona que opcionalmente podría usar Resharper; Con dotPeek y resharper puedes navegar hasta el desmontaje del código original, es lo que uso en el trabajo, donde tenemos una configuración similar a la tuya.

Encuentro una combinación del Servidor de símbolos que mencionó y navegar por el desmontaje normalmente es suficiente para descubrir qué está sucediendo.

Espero que ayude.

Editar: Después de volver a leer su pregunta, me doy cuenta de que solicita específicamente poder navegar por el código fuente, que no es así. Sin embargo, espero que sea útil para alguien.

BaronVonDrew
fuente