Antes de NuGet, era una "práctica recomendada" comúnmente aceptada registrar todas las DLL externas utilizadas en un proyecto. Normalmente en un directorio Libs
o 3rdParty
.
Cuando trabaje con NuGet, ¿se supone que debo registrar el packages
directorio o hay alguna forma de que MSBuild descargue automáticamente los paquetes necesarios de la fuente de nuget?
version-control
msbuild
nuget
Scott Weinstein
fuente
fuente
Respuestas:
No
Dado que se hizo esta pregunta, ahora hay un flujo de trabajo fácil para usar NuGet sin comprometer paquetes al control de código fuente
Desde la consola de su administrador de paquetes, necesita instalar 'NuGetPowerTools' :
Luego, para permitir que sus proyectos admitan la restauración del paquete, debe ejecutar otro comando:
Ahora está listo para enviar su código base sin la carpeta de paquetes. El comando anterior cambió los archivos de su proyecto para que, si faltan paquetes, se descarguen y agreguen automáticamente.
Fuente
Usar NuGet sin enviar paquetes al control de código fuente
fuente
Enable NuGet Package Restore
. Consulte los documentos .Si. Considere que el directorio "paquetes" es equivalente a su directorio "libs" que mencionó en su pregunta. Este es el enfoque que adopto personalmente con mis proyectos de OSS.
Estamos investigando características que permitirían a MSBuild descargar automáticamente los paquetes necesarios, pero eso no se ha implementado (a partir de NuGet 1.1).
Creo que es posible que algunas personas ya hayan implementado estas funciones por su cuenta, pero nuestro plan es tener esa función integrada en NuGet 1.2 o 1.3 con suerte.
fuente
A pesar de todas las respuestas aquí, sigue siendo una sencilla y horrible solución no tener todas sus dependencias bajo "algún tipo" de control de versiones.
Para GIT, esto significaría GIT-LFS.
El episodio reciente con NPM muestra por qué: si el repositorio de Internet del que depende se rompe, no está disponible, etc., entonces está jodido, ¿no es así?
Ya no puede construir sus cosas y, por lo tanto, no puede entregarlas.
fuente
npm
se rompió porque no eliminó los paquetes, en realidad los eliminó. NuGet no hace esto; si en algún momento no puede acceder a NuGet, algo está terriblemente mal. No creo que almacenar una craptonne de dependencias en git sea una buena solución: simplemente bloquea tus dependencias en una versión específica y ten un espejo entre tú y en Internet si eso te importa.Desde que hice la pregunta, he aplicado el siguiente enfoque para no tener que registrarme en el directorio Toplovel Packages .
En un archivo build.msbuild de nivel superior:
<Target Name="NuGet"> <ItemGroup> <NuGetPackage Include="*\packages.config" /> </ItemGroup> <Exec Command='libs\NuGet.exe install "%(NuGetPackage.FullPath)" -o Packages' /> <!-- optional for project that has JavaScript content --> <CreateItem Include="Packages\*\Content\Scripts\*"> <Output TaskParameter="Include" ItemName="NuGetJSFiles"/> </CreateItem> <Copy SourceFiles="@(NuGetJSFiles)" DestinationFolder="MainProj\Scripts\" OverwriteReadOnlyFiles="true" SkipUnchngedFiles="true" /> <Delete Files="MainProj\Scripts\.gitignore" /> <WriteLinesToFile File="MainProj\Scripts\.gitignore" Lines="%(NuGetJSFiles.Filename)%(NuGetJSFiles.Extension)" / <Delete Files="@(PostNuGetFiles)" /> </Target>
En cada archivo project.csproj
<Target Name="BeforeBuild"> <Error Condition="!Exists('..\Packages\')" Text="You must run > msbuild build.msbuild to download required NuGet Packages" /> <!-- optional for project that has JavaScript content --> <ReadLinesFromFile File="Scripts\.gitignore"> <Output TaskParameter="Lines" ItemName="ReqJSFiles" /> </ReadLinesFromFile> <Message Text="@(ReqJSFiles)" /> <Error Condition="!Exists('Scripts\%(ReqJSFiles.Identity)')" Text="You must run > msbuild build.msbuild to download required NuGet JS Package - Scripts\%(ReqJSFiles.Identity)" /> </Target>
fuente
Me doy cuenta de que la realidad era diferente cuando esta pregunta se publicó y se respondió originalmente, pero afortunadamente la respuesta cambió un poco. Ahora es posible usar NuGet para descargar dependencias a través de MSBuild mediante un evento de precompilación. No es necesario que coloque la carpeta de paquetes en su repositorio de código, todas las dependencias se descargarán y / o actualizarán en la compilación. Puede que sea una solución, pero parece bastante decente. Consulte la siguiente publicación del blog para obtener más detalles: http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html
fuente
A partir del 20/09/13, hay algo llamado "Restauración Nuget". En realidad, no tiene que registrar la carpeta del paquete si desea hacerlo. (Especialmente si está usando DVCS)
Vea esto: Uso de NuGet sin comprometer paquetes con el control de código fuente http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
fuente
Esta publicación se ha vuelto muy desactualizada. La respuesta sigue siendo NO, pero la solución ha cambiado. A partir de NuGet 2.7+, puede habilitar la restauración automática de paquetes sin incluir el archivo NuGet.exe en su fuente (esto es indeseable por decir lo menos) y si usa cualquier DVCS moderno, puede ignorar la carpeta de paquetes. Si necesita personalizaciones especiales, puede crear un archivo nuget.config en la raíz de la solución.
http://docs.nuget.org/docs/reference/package-restore
Además, con el nuevo formato csproj también puede evitar los archivos nuget.config adicionales, ya que ahora está integrado. Consulte esta publicación que lo explica mejor:
¿Debería agregarse la carpeta .nuget al control de versiones?
fuente