.net nuget .net-4.5

.net - ¿Qué hace el paquete Microsoft.Bcl.Build NuGet?



.net-4.5 (2)

Desde mirar Microsoft.Bcl.Build.targets , tiene un conjunto de objetivos de configuración de proyecto, por ejemplo:

  • EnsureBindingRedirects : determine qué referencias están EnsureBindingRedirects para los redireccionamientos de enlace y actualice app.config con ellos.
  • BclBuildValidateNugetPackageReferences : este objetivo valida que los paquetes de Nuget instalados en el proyecto actual también tengan sus dependencias (dependencias transitivas) instaladas en el proyecto actual.

Por lo tanto, en función de esta evaluación, decidí que esta funcionalidad solo es necesaria en un entorno de desarrollo, al agregar / eliminar / actualizar dependencias NuGet; y que podría ser ignorado en un entorno de CI, donde está causando problemas.

Así que quiero mantener la dependencia en mis archivos * .csproj, pero ignórelo cuando ejecute una compilación CI. Lo hice al agregar una importación condicional en un archivo de objetivos de entorno de construcción (por ejemplo, builder.targets), que incluye este bloque:

<!-- Skip Microsoft.Bcl.Build functionality when building only from Source. --> <PropertyGroup> <BclBuildImported>Ignore</BclBuildImported> </PropertyGroup>

Esto tiene el efecto neto de ignorar los objetivos en un entorno de CI, pero activándolos en un entorno de desarrollo. He tenido esto funcionando por más de una semana, y no hay problemas hasta ahora ...

Todavía me encantaría saber si alguien tiene mejor información sobre este paquete que indique que hacer esto es una mala idea. Hasta ahora soy de la opinión de que es una buena idea.

Editar 2018-02-01:

Tenga en cuenta que el parámetro ignorar también se puede pasar en la línea de comandos, para omitir la lógica Microsoft.Bcl.Build.targets :

msbuild (targets, etc) /p:BclBuildImported=Ignore

No puedo encontrar ninguna documentación sobre esto: los enlaces de la página Microsoft.Bcl.Build Nuget no brindan mucha ayuda:

Este paquete proporciona componentes de infraestructura de compilación para que los proyectos que hacen referencia a paquetes específicos de Microsoft puedan compilarse con éxito.

No haga referencia directa a estos paquetes a menos que reciba una advertencia de compilación que lo instruya a agregar una referencia.

Al mirar el archivo Microsoft.Bcl.Build.targets , parece que gestiona los redireccionamientos de enlace y las referencias de paquetes. Parece que parte de esta funcionalidad solo se usa cuando se ejecuta en Visual Studio.

¿Alguien puede proporcionar más información sobre lo que hace este paquete? Es un dolor en nuestro entorno de servidor de compilación , ¿puede ignorarse cuando se construye completamente a partir del código fuente (por ejemplo, entorno de servidor de compilación)?