tfs - valida - La creación de Team Foundation Service falla en la restauración del paquete NuGet
visual studio la configuracion de nuget no es valida (8)
Tengo un problema extraño con mi build Team Foundation Service. Lo pongo en cola y comienza bien, pero luego falla con el siguiente error:
C:/a/src/Platform/Prod/Platform.Web/Platform.Web.csproj (436): The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.
Entonces, vuelvo a poner en cola la compilación según el mensaje / URL y ... vuelve a suceder. Busqué en Google pero parece que no puedo entender cuál es el problema. Puedo construir bien en Visual Studio y la solución está configurada para restaurar paquetes. ¿Alguna idea?
Gracias por adelantado.
Abra el csproj ofensor en el bloc de notas o en cualquier otro editor. Compruebe si el objetivo EnsureBclBuildImported está disponible en csproj. Si es así, comente la segunda condición de error dentro del objetivo que dirige la compilación para que falle incluso si el paquete está disponible (¡es como fallar la compilación independientemente de si el paquete está disponible o no!).
<Target Name = "EnsureBclBuildImported" BeforeTargets = "BeforeBuild" Condition = "''$ (BclBuildImported)'' == ''''">
<Error Condition = "! Exists (''.. / packages / Microsoft.Bcl.Build.1.0.14 / tools / Microsoft.Bcl.Build.targets'')" Text = "Este proyecto hace referencia a los paquetes NuGet que faltan en esta computadora. Habilite NuGet Package Restore para descargarlos. Para obtener más información, vea http://go.microsoft.com/fwlink/?LinkID=317567 . " HelpKeyword = "BCLBUILD2001" />
<Error Condition = "Exists (''.. / packages / Microsoft.Bcl.Build.1.0.14 / tools / Microsoft.Bcl.Build.targets'')" Text = "La compilación restauró los paquetes NuGet. Genere el proyecto nuevamente para incluir estos paquetes en la compilación. Para obtener más información, vea link . "HelpKeyword = "BCLBUILD2002" />
</ Target>
He visto el problema similar en un proyecto de Xamarin y los siguientes pasos solucionaron mi problema;
- Establezca el modo de proyecto para Liberar y Reconstruir todo
- Establezca el modo de proyecto nuevamente en Depurar y reconstruir todo
- Problema ordenado
Extraño pero funcionó para mí, espero que ayude.
La solución a esto se especifica en el link en el mensaje de error en sí.
Esto está sucediendo debido a una Mejora como se especifica en esa página:
El mejoramiento
Hemos actualizado Microsoft.Bcl.Build para utilizar un enfoque diferente. La nueva versión usará una importación condicional similar a la función de importación automática de NuGet. Esto siempre permitirá que el proyecto cargue en Visual Studio.
Sin embargo, Microsoft.Bcl.Build también agrega un objetivo a su proyecto que se ejecutará después de que la construcción haya finalizado. Este objetivo comprueba si la compilación actual restauró los paquetes y, si es así, falla la compilación con un mensaje de error accionable:
Crear una segunda vez solucionará este error. Tenga en cuenta que este error solo aparecerá si faltan paquetes, por lo que no siempre tendrá que generar dos veces.
A continuación, especifica lo siguiente para el caso del servidor de compilación / integración continua (CI):
Esta solución no aborda los escenarios del servidor de compilación / integración continua (IC). Para poder utilizar la restauración del paquete en el servidor de compilación, tiene dos opciones:
- Regístrese en el archivo .targets.
- Ejecuta explícitamente la restauración del paquete NuGet antes de construir tu proyecto / solución.
Entonces, supongo que para la resolución de su problema deben seguirse los dos pasos anteriores.
Me encontré con este problema en un proyecto de API web, pero usamos NAnt.
La resolución fue actualizar el paquete nuget Microsoft BCL Build Components a la última versión (1.0.21) y las cosas se desarrollan bien ahora.
O bien los archivos de destino TFSBuild requeridos deben estar incluidos en el control de código fuente o los paquetes NuGet deben restaurarse antes de intentar construir la solución.
Los detalles sobre cómo hacer esto se proporcionan en nuget.org .
Básicamente implica crear un nuevo archivo de proyecto de compilación que primero restaura paquetes y luego crea su solución.
Que dolor. Simplemente tuve el mismo problema con TeamCity que con TFS. Estamos restaurando paquetes explícitamente antes de compilar, pero algunos proyectos siguen produciendo errores en el servidor de CI. Pudimos resolverlo sin hackear los archivos csproj al forzar la propiedad de compilación BclBuildImported = True
después de restaurar los paquetes: los destinos deshonestos en los archivos csproj están condicionados a que no se establezca esta propiedad.
Puede ser una forma más robusta a su alrededor si puede establecer fácilmente esta propiedad en TFS.
Si alguien sigue teniendo este problema en el servidor de compilación de tfs, debe hacer lo siguiente:
- Asegúrese de que todos los proyectos en solución que intenta crear tengan el último paquete Microsoft.Bcl.Build (simplemente actualícelo en el administrador de paquetes).
- Después de la compilación no se pudo ver todo el proyecto (en el resumen del registro de compilación tfs) que genera este error ("La compilación restaura los paquetes NuGet ...")
- Abra cada uno de los archivos .proj de esos proyectos y comente todo el elemento de destino iniciado con ''Nombre de destino ='' EnsureBclBuildImported ''''
- Regístrese y vuelva a intentar la construcción
Parece que de alguna manera después de la actualización, no todos los proyectos obtienen ese antiguo bloque de código de compilación eliminado y está causando problemas (ya que entiendo que ya no es necesario después de que Microsoft cambió su proceso de compilación bcl).
Tuve que restaurar paquetes antes del objetivo limpio de mi script de compilación. Pensé erróneamente que restaurar los paquetes antes de construir era suficiente.
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets=''GatherBinaries'' xmlns=''http://schemas.microsoft.com/developer/msbuild/2003''>
<Target Name=''RestorePackages''>
<Exec Command=''tools/NuGet.exe Restore "Web.sln"''/>
</Target>
<!--
must call RestorePackages prior to clean to avoid error the following error
"The build restored NuGet packages. Build the project again to include these packages in the build."
-->
<Target Name=''Clean'' DependsOnTargets=''RestorePackages''>
<MSBuild Projects=''Web.sln'' Targets=''Clean'' Properties=''Configuration=Release''/>
</Target>
<Target Name=''Build'' DependsOnTargets=''Clean;RestorePackages''>
<MSBuild Projects=''Web.sln'' Targets=''Build'' Properties=''Configuration=Release''/>
</Target>
</Project>