El misterio de stuck inactive msbuild.procesos exe, Stylecop bloqueado.dll, Nuget AccessViolationException y CI compilaciones que chocan entre sí


Observaciones:

  • En nuestro servidor de compilación Jenkins, estábamos viendo un montón de msbuild.procesos exe (~100) colgando alrededor después de la finalización del trabajo con alrededor de 20mb de uso de memoria y 0% de actividad de la CPU.

  • Las compilaciones que usan diferentes versiones de stylecop fallaron intermitentemente :

    workspace\packages\StyleCop.MSBuild.4.7.41.0\tools\StyleCop.targets(109,7): error MSB4131: The "ViolationCount" parameter is not supported by the "StyleCopTask" task. Verify the parameter exists on the task, and it is a gettable public instance property.

  • Nuget.exe estaba saliendo intermitentemente con el siguiente error de violación de acceso (0x0000005):

    .\workspace\.nuget\nuget install .\workspace\packages.config -o .\workspace\packages" exited with code -1073741819.

MSBuild se lanzó de la siguiente manera a través de un trabajo de matriz Jenkins, con' BuildInParallel ' habilitado:

    `msbuild /t:%Targets% /m
    /p:Client=%Client%;LOCAL_BUILD=%LOCAL_BUILD%;BUILD_NUMBER=%BUILD_NUMBER%;
    JOB_NAME=%JOB_NAME%;Env=%Env%;Configuration=%Configuration%;Platform=%Platform%;
    Clean=%Clean%; %~dp0\_Jenkins\Build.proj`
Author: Jon Rea, 2012-11-22

2 answers

Después de un lote de investigar y probar varias cosas sin ningún efecto, finalmente terminé creando una nueva solución mínima que reprodujo el problema con muy poco más. El problema resultó ser causado por la paralelización multinúcleo de msbuild-el parámetro 'm'.

  • El parámetro ' m 'le dice a msbuild que genere "nodos", estos permanecerán vivos después de que la compilación haya terminado, ¡y luego serán reutilizados por nuevas compilaciones!
  • El error 'ViolationCount' de StyleCop fue causado por una compilación dada reutilizando una versión antigua de stylecop.dll del espacio de trabajo de otra compilación, donde ViolationCount no era compatible. Esto era extraño, porque el espacio de trabajo CI solo contenía la nueva versión. Parece que una vez que el StyleCop.dll se cargaba en un nodo MSBuild dado, permanecería cargado para la siguiente compilación. Solo puedo asumir que esto es porque StyleCop carga algún tipo de singleton en los procesos de nodos? Esto también explica el bloqueo de archivos entre compilaciones.
  • El nuget el bloqueo de violación de acceso ha desaparecido (sin otros cambios), por lo que evidentemente está relacionado con el problema de reutilización de nodos anterior.
  • Como el parámetro' m ' por defecto al número de núcleos - que estábamos viendo 24 instancias msbuild creadas en nuestro servidor de compilación para un trabajo determinado.

Los siguientes posts fueron útiles:

La solución:

  • Agregue la línea set MSBUILDDISABLENODEREUSE=1 al archivo por lotes que inicia msbuild
  • Inicie msbuild con /m:4 /nr:false
  • El paremeter 'nr' le dice a msbuild que no use "Node Reuse" - por lo que las instancias de msbuild se cierran después de que se completa la compilación y ya no chocan entre sí - lo que resulta en los errores anteriores.
  • El parámetro' m ' se establece en 4 para detener la generación de demasiados nodos por trabajo
 59
Author: Jon Rea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:46:37

Tuve el mismo problema. Una referencia antigua que encontré estaba en csproj files

<PropertyGroup>
<StyleCopMSBuildTargetsFile>..\packages\StyleCop.MSBuild.4.7.48.0\tools\StyleCop.targets</StyleCopMSBuildTargetsFile>

Además, eliminé toda la carpeta "Paquetes" que se encuentra en la misma carpeta que el archivo sln después de cerrar visual studio. Se activó VS para reconstruir la carpeta y dejar ir la caché de la versión anterior de stylecop

 1
Author: Jin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-01 10:37:55