¿Debería agregarse la carpeta .nuget al control de versiones?

107

Con las versiones más recientes de NuGet, es posible configurar un proyecto para restaurar automáticamente los paquetes de NuGet de modo que la packagescarpeta no tenga que incluirse en el repositorio de código fuente. Bueno.

Sin embargo, este comando agrega una nueva .nugetcarpeta y hay un binario allí, NuGet.exe. Visual Studio también puede volver a crearlo automáticamente, por lo que no parece correcto agregarlo al control de versiones. Sin embargo, sin esta carpeta, Visual Studio ni siquiera cargará la solución correctamente.

¿Cómo lidian ustedes con esto? ¿Agregar .nuget al control de fuente? ¿Ejecuta algún script de línea de comando antes de abrir la solución?

Borek Bernard
fuente
Este es el enlace más auténtico docs.nuget.org/docs/workflows/… y dado que es un hilo antiguo. Solo me gustaría compartir la información en el comentario ...
Naveed Butt

Respuestas:

47

Esta publicación es antigua, ya no debería usar la restauración del paquete NuGet a nivel de solución. A partir de la versión 2.7+, existe una opción en la configuración de NuGet para restaurar automáticamente los paquetes en la compilación. Entonces, la carpeta .nuget se puede eliminar y la opción eliminar de sus proyectos.

http://docs.nuget.org/docs/reference/package-restore

ACTUALIZACIÓN: con el lanzamiento de NuGet 4.xy .NET Standard 2.0, cuando usa el nuevo formato csproj ahora puede usar referencias de paquetes, lo que irónicamente reintroduce la dependencia en msbuild para restaurar paquetes, pero ahora los paquetes son un ciudadano de primera clase de msbuild . El enlace anterior también menciona el PackageReference, pero el siguiente anuncio lo detalla mejor:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

Y el anuncio de NuGet 4.x RTM, que irónicamente no es tan útil:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

ACTUALIZACIÓN 2: Aparentemente, con VS2017 incluso puede usar referencias de paquetes con proyectos clásicos de csproj, pero ya no son compatibles con versiones anteriores y ha habido algunos problemas con la restauración de las subdependencias de paquetes. Estoy seguro de que todo se resolverá.

Jeremy
fuente
@CAD Bloke, sí, eso está en la lista de lectura al final, gracias por reducirlo.
Jeremy
Puede actualizar fácilmente Nuget en VS usando Tools > Extensions & Updates > Updates.
jocull
47

La respuesta de @Richard Szalay es correcta: no es necesario que confirme nuget.exe. Si, por alguna razón, Visual Studio no descarga automáticamente nuget.exe, asegúrese de tener lo siguiente establecido en verdadero en el nuget.targetsarchivo:

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

Cierre la solución VS, vuelva a abrirla y compile. Visual Studio debería descargar nuget.exe automáticamente ahora.

Gan
fuente
Por cierto, ¿alguien sabe por qué no está configurado truede forma predeterminada?
ajukraine
2
Es más una preocupación por la privacidad. "El simple hecho de realizar una solicitud a través de Internet puede revelar información sobre el usuario (por ejemplo, a partir de la dirección IP del usuario, podemos aproximar su ubicación)". Consulte el artículo sobre restauración y consentimiento del paquete en el blog de Nuget
Gan
1
Para su información: cuando NuGet.exe no está presente en la carpeta .nuget, el menú contextual de la solución mostrará "Habilitar la restauración del paquete NuGet", aunque la restauración del paquete NuGet ya esté configurada. Después de una compilación, la opción desaparecerá.
comecme
Esta debería ser la respuesta aceptada, en mi opinión ... Si NuGet.exe fuera súper pequeño, tal vez diría que lo coloca en el control de fuente y se ocupa de todo lo que tenga que hacer en su archivo de ignorar. Pero son 1,5 megas, lo suficientemente grande para que siempre lo haga a la manera de Gan.
Brian MacKay
¿Dónde descarga el formulario nuget.exe? ¿Qué pasa si mi servidor de compilación no tiene Internet?
bitbonk
22

Según este hilo , la carpeta .nuget debe estar controlada por versión.

Borek Bernard
fuente
20

Necesitas comprometerte .nuget\nuget.targets, pero no nuget.exe. Los destinos descargarán el archivo ejecutable si no existe, siempre que cambie DownloadNuGetExea trueen nuget.targets

Richard Szalay
fuente
4

Aunque por lo general no me gusta la idea de agregar archivos ejecutables al control de código fuente, sugeriría que el control de código fuente debería contener todo lo necesario para abrir, construir y ejecutar el proyecto.

En este caso, parece que la carpeta .nuget es una dependencia necesaria. Por lo tanto, debería estar bajo control de fuente.

La única pregunta que queda, que necesita investigar, es cómo reaccionará NuGet si esa carpeta está marcada como de solo lectura, lo que hará TFS una vez que se haya registrado.


Actualización: Investigué un poco más sobre esto, ya que nunca antes había usado NuGet. http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

Sugeriría que probablemente lo que quiera hacer es convertir NuGet en un requisito que debe instalarse en todas las estaciones de trabajo de los desarrolladores.

Además, debe colocar en control de código fuente el archivo por lotes necesario para que una estación de trabajo esté lista para comenzar a editar el proyecto. El archivo por lotes ejecutará los comandos necesarios para obtener e instalar los paquetes de dependencia.

Más allá de eso, diría que es posible que desee ponerse en contacto con NuGet directamente para preguntarles cómo, exactamente, se supone que funciona esto.

Yo no
fuente
1
Pensé que <RestorePackages>true</RestorePackages>en el archivo * .csproj debería haber suficiente información para Visual Studio, pero tal vez no lo sea.
Borek Bernard
1

Ahora que nuget admite la restauración de paquetes, lo estamos analizando más de cerca.

Usamos Subversion para el control de fuentes, y mis pensamientos iniciales son que .nugetdebería agregarse a nuestro repositorio, pero agregarlo usando svn: externals para que apunte a una sola ubicación.

De esa manera, podemos enviar automáticamente nuevas versiones a todos los desarrolladores y proyectos. Para proyectos en ramas de lanzamiento, en lugar de HEAD, podemos especificar la revisión de svn: referencia externa si queremos dejar nuget solo.

Tenemos muchos proyectos, por lo que también significa no duplicar nuget.exevarias veces en el repositorio.

si618
fuente
No pude hacer que NuGet restaure paquetes de proyectos externos. ¿Funcionó esto para usted ?.
Doguhan Uluca
Sí, aunque NuGet.exe parece tener problemas para autenticarse en nuestro repositorio local (autenticación IIS 6 + SSL + AD) mientras que Powershell o Extension Plugin funcionan bien.
si618
1

Tenemos el nuget.configarchivo en la carpeta, ya que tiene las referencias a nuestro servidor interno de Nuget, usando el área de fuentes del paquete: https://docs.nuget.org/consume/nuget-config-settings

Aparte de esta razón, debe dejar que Visual Studio se encargue de la descarga de paquetes.

Karl Gjertsen
fuente