Buff, ClickOnce: ¡menuda tecnología del año de la polca! Se nota que soy un viejuno 😁

Lo cierto es que ClickOnce es una tecnología interesante que, aunque no esté tan de moda como en tiempos, se sigue utilizando y mucho. ¿No me crees? Vale, pues prueba a instalar por ejemplo Google Chrome en Windows y la verás en acción. Sí, ese pequeño ejecutable que te salta y que te pide permisos para instalar desde una ubicación remota es ClickOnce en todo su esplendor.

Nosotros en campusMVP internamente tenemos alguna aplicación de escritorio que se distribuye así y que facilita mucho la instalación y el despliegue de nuevas versiones en los equipos que la utilizan. Así que será poco "cool", pero funciona y tiene muchas ventajas.

El problema

El caso es que en ocasiones puede que te ocurra lo siguiente cuando despliegas una aplicación con esta tecnología. Compilas el proyecto, le das a "Publicar", lo despliegas a tus usuarios... y cuando van a instalarlo les salta un mensaje como el siguiente:

Unable to install or run the application. The application requires XXXXX Version X.y.zzzz.0 in the GAC

o en el idioma de Cervantes:

No se ha podido instalar o ejecutar la aplicación. La aplicación necesita XXXXX Versión X.y.zzzz.0 en el GAC

"WTF? He verificado todas las dependencias y están en la versión compilada. Es más, ni siquiera me suena que esa biblioteca que me pide la use mi aplicación para nada".

Y lo que es peor, en algunos usuarios se instala sin problemas y en otros no 🤔

¿A qué se debe esto?

La solución

Bueno, la causa concreta por la cual ciertos ensamblados que en teoría están en la GAC desaparecen o más bien no están, no la sé. Imagino que depende de la versión de .NET concreta que tengas, de la versión del sistema operativo, etc...

Lo bueno es que la solución es sencilla.

Los pasos son los siguientes:

  1. Pulsa con el botón secundario (normalmente el derecho) sobre el nodo de tu proyecto. Me refiero al proyecto principal, al que se compila y luego se distribuye. Vete a sus propiedades.
  2. En las propiedades busca la pestaña "Publicar" y una vez allí pulsa el botón "Prerrequisitos":

Pestaña publicar

  1. En el diálogo que aparece localiza el ensamblado que te da problemas. En mi caso era log4net.dll:

    Prerrequisitos

    Por defecto lo detecta de manera automática como un prerrequisito, es decir, algo que debe estar ya instalado en el equipo del usuario. Si esto es así y no lo tiene el instalador de ClickOnce ni siquiera dejará que siga la instalación, obteniendo el mensaje de error indicado.

  1. Cambia el valor del primer desplegable de "Prerrequisito" a "Incluir" y en el "Grupo de descarga" como "Requerido":

Prerrequisitos cambiados

Esto forzará a que el ensamblado se distribuya con la aplicación y que por lo tanto se instale si no lo está ya.

El problema desaparecerá.

¡OJO!: tienes que ver si la licencia del componente que está marcado como prerrequisito permite su distribución con la aplicación. Algunos componentes no se pueden distribuir, y los usuarios deben descargarlos por separado e instalarlos antes. En un proyecto interno no debería haber problema, pero si va a ser público o se va a vender o distribuir "en masa", puedes tener problemas legales. Asegúrate de saber esto antes de hacer lo que indico.

¡Espero que te resulte útil!

Escrito por un humano, no por una IA