Referencia de .NET "Copiar local" Verdadero / falso establecido en función del contenido de GAC

Tuvimos un problema muy interesante con un proyecto Win Forms. Ha sido resuelto. Sabemos lo que pasó, pero queremos entender por qué sucedió. Esto puede ayudar a otras personas en el futuro que tengan un problema similar.

El proyecto WinForms falló en 2 de las PC de nuestros clientes. El error fue un oscuro error kernel.dll. El proyecto funcionó bien en otras 3 PC.

Descubrimos que faltaba un archivo .DLL (log4net.dll, una biblioteca de registro de código abierto muy popular) en nuestra carpeta de lanzamiento. Anteriormente estaba en nuestra carpeta de lanzamiento. ¿Por qué faltaba en esta última versión?

Faltaba porque debía haber instalado un programa en mi cuadro Dev que utilizara log4net.dll y se agregó a la Caché de ensamblados global.

Cuando verifiqué las referencias de la solución para log4net.dll, se cambiaron a "copy local = FALSE". Deben haber cambiado automáticamente porque log4net.dll estaba presente en mi GAC.

Aquí es donde comienza mi pregunta:

¿Por qué cambió mi referencia para log4net.dll de COPY LOCAL = TRUE a COPY LOCAL = FALSE? Sospecho que es porque otro programa lo agregó a mi GAC.

¿Cómo podemos evitar que esto vuelva a suceder? Tal como está ahora, si instalo un software que usa una biblioteca común y lo agrega a mi GAC, entonces mis SLN que hacen referencia a esa DLL cambiarán de Copiar local VERDADERO a FALSO.

Respuestas a la pregunta(5)

Su respuesta a la pregunta