Buenas!
Lo voy a dejar apuntado en un post para que luego no me olvide. Comencemos por el contexto
- Trabajamos con una App web. Por ejemplo, una Microsoft Bot App con Visual Studio
- El despliegue de la misma se realiza a Azure como parte de un proceso automatizado (DevOps rules!)
- Todo funciona perfectamente
Hasta que en un momento te encuentras que tu Web App no funciona más. Y cuando intentas navegar uno de los controllers, puede aparecer un mensaje como el siguiente
Multiple types were found that match the controller named ‘messages’. This can happen if the route that services this request (‘api/{controller}/{id}’) found multiple controllers defined with the same name but differing namespaces …
Hay varios motivos por los que suele suceder esto. Sin embargo uno de los mas populares es que has renombrado o cambiado algunos namespaces y se han generado nuevas Dlls como parte de la solución. El problema está en que, por defecto, y como mecanismo para ahorrar trabajo, los despliegues solo copian los ensamblados que se han modificado a la ubicación de destino. En este caso, a un folder de IIS.
Antes de seguir tengo que retomar las palabras del gran Damian Brady (@damovisa):
Friends don’t let friends right-click publish
La 1ra vez que has visto una opción que te permite limpiar el directorio de destino y luego copiar el directorio de compilación es en la opción Publish de un website en Visual Studio 2017
Pues bien, si has configurado la publicación de tu website como parte de un proceso de Build – Releases, es en esta última sección donde encontraras la opción [Remove additional files at destination], que eliminara los Assemblies innecesarios de tu solución
Happy Coding!
Saludos @ Burlington
El Bruno