visual studio descargar .net msbuild nuget teamcity

.net - studio - restauración dotnet frente a restauración nuget con teamcity



get nuget (3)

Tengo un proyecto central de asp.net que se construye correctamente con VS pero no se construye bajo msbuild.

No encuentra todas las librerías comunes (sistema, etc.)

Estoy usando teamcity y parte del proceso de compilación es una restauración nuget.

Intenté hacer los mismos pasos que teamcity, pero manualmente con msbuild, y falló, al no encontrar las librerías.

Añadí un paso de restauración dotnet y luego funcionó.

Entonces, ¿cuál es la diferencia entre una restauración nuget y una restauración dotnet ?


La restauración de Nuget asegurará que todas sus dependencias de nuget se descarguen y estén disponibles para su proyecto. Mientras que dotnet restore es una restauración completa de todas las dependencias de nuget, así como las referencias y herramientas específicas del proyecto. Lo que significa que si ejecuta la restauración de nuget, solo está restaurando paquetes de nuget.

Según docs.microsoft.com: Dotnet Restore

El comando de restauración de dotnet usa NuGet para restaurar dependencias, así como las herramientas específicas del proyecto que se especifican en el archivo del proyecto ...


Tuve problemas similares con un proyecto .net core 2 que funcionaría bien en mi estación de trabajo, tanto dentro de Visual Studio 2017 como usando msbuild solamente, pero no integré TeamCity. El mensaje de error fue:

C:/Program Files/dotnet/sdk/2.1.4/Sdks/Microsoft.NET.Sdk/build/Microsoft.PackageDependencyResolution.targets(327, 5): Assets file ''D:/TeamCity/buildAgent/work/596486b1d4e7a8e7/Source/Integrations/SomeAPI/obj/project.assets.json'' not found. Run a NuGet package restore to generate this file.

En mi configuración de compilación ya tenía un paso de instalación de NuGet antes del paso de compilación:

  • NuGetversion: 3.4.4
  • Modo de restauración: instalar

Resultó que tenía que usar:

  • Versión de NuGet: 4.0.0 o superior
  • Modo de restauración: Restaurar (requiere NuGet 2.7+)

Tanto la nuget restore son aproximadamente iguales: realizan una operación de restauración nuget.

La única diferencia: la dotnet restore es un envoltorio de conveniencia para invocar dotnet msbuild /t:Restore que invoca una restauración integrada de msbuild. Esto solo funciona en distribuciones de msbuild que incluyen NuGet, como VS 2017 (VS completo, herramientas de compilación) o Mono 5.2+ (=> msbuild /t:Restore ) y .NET Core Sdk, que proporciona este comando de conveniencia.

En este momento, hay 2 formas de utilizar los paquetes de NuGet en proyectos (3 en realidad, pero ignoremos project.json en UWP por el momento):

  • packages.config : la forma "clásica" de hacer referencia a los paquetes de NuGet. Esto supone que NuGet es una herramienta independiente y msbuild no sabe nada acerca de NuGet. Un cliente NuGet como nuget.exe o herramientas integradas VS ve el archivo packages.config y descarga los paquetes referenciados en una carpeta local para la restauración. Una instalación de paquete modifica el proyecto para hacer referencia a activos fuera de esta carpeta local. Así que una restauración para un proyecto packages.config solo descarga los archivos.
  • PackageReference : el proyecto contiene elementos de MSBuild que hacen referencia a un paquete de NuGet. A diferencia de packages.config , solo se enumeran las dependencias directas y el archivo del proyecto no hace referencia directa a ningún activo (archivos DLL, archivos de contenido) de los paquetes. En la restauración, NuGet resuelve el gráfico de dependencia al evaluar las dependencias directas y transitivas, se asegura de que todos los paquetes se descarguen en el caché de paquetes global del usuario (no de solución local, por lo que solo se descarga una vez) y escriba un archivo de activos en la carpeta obj que contiene una lista de todos los paquetes y activos que utiliza el proyecto, así como los objetivos msbuild adicionales si algún paquete contiene lógica de compilación que debe agregarse a un proyecto. Por lo tanto, una restauración de nuget puede descargar paquetes si aún no están en el caché global y crear este archivo de activos. Además de las referencias de paquetes, el proyecto también puede hacer referencia a las herramientas CLI, que son paquetes de NuGet que contienen comandos adicionales que estarán disponibles para la dotnet de dotnet en el directorio del proyecto.

La restauración msbuild-integrada solo funciona para proyectos de tipo PackageReference (.NET Standard, .NET Core de forma predeterminada, pero son opcionales para cualquier proyecto .NET) y no para proyectos packages.config . Si usa una nueva versión de nuget.exe (por ejemplo, 4.3.0), es posible restaurar ambos tipos de proyectos.

Su error sobre los tipos faltantes es un poco más interesante: los "ensamblajes de referencia" (las bibliotecas que se pasan como entrada al compilador) no están instalados en el sistema, sino que vienen a través de los paquetes de NuGet. Entonces, mientras falten los paquetes NuGet de la caché de paquetes global o el archivo obj/project.assets.json no haya sido generado por una operación de restauración, los tipos fundamentales como System.Object no estarán disponibles para el compilador.