miércoles, 19 de marzo de 2008

Mono: error CS0433: The imported type `XXXXX' is defined multiple times

Intentando de correr una aplicacion en Mono obtuve el siguiente mensaje de error:

Compilation Error

Description: Error compiling a resource required to service this request. Review your source file and modify it to fix this error.

Error message:

/var/tmp/www-temp-aspnet-0/a9e8b93/759bb5af.0.cs(28,41) : error CS0433: The imported type `_Default' is defined multiple times


A simple vista parece un error de compilacion ocasionado por nosotros mismos al desarrollar la aplicacion, algo que esta definido varias veces en un mismo contexto, por lo cual si es un error de esa naturaleza, pues compilarlo en Visual Studio deberia de dar el mismo error o algo parecido, pero no es asi, en el FrameWork.Net de windows trabaja sin ningun problema.

Buscando en la red, no encontre nada parecido, ni una pista, perdi mucho tiempo indagando y en la red no estaba la solucion. Ya estaba por pensar que la implementacion de Mono no estaba muy acabada como para migrar y correr aplicaciones rubustas desarrollada en .Net de Windows (claro, sin incluir componentes o recursos de terceros que solo trabajan en un ambiente win)


Pues bien, observando detenidamente el error, me fijaba que el problema estaba en la declaracion de una pagina (_Default) que unicamente contenia un masterpage y luego en su interior estaba totalmente vacia. Pero la aplicacion completa contenia unos 6 masterpage adicionales, porque concretamente esta es la del problema? o quizas todas tenian el mismo problema y esta era la primera en detectarse? que rompecabezas :S

Pero la solucion era tan sencilla que era muy dificil de imaginar: la pagina que se daba como referencia en el error, es una pagina que estaba repetida varias veces dentro de otras carpetas, o sea, identica, mismos nombres, mismas declaraciones en el codebehind. El Framework de windows pasa desapersivido esto, pero Mono no.

Pagina 1:
public partial class _Default : System.Web.UI.Page

Pagina 2:
public partial class _Default : System.Web.UI.Page

No pueden existir dos clases con los mismos nombres en un mismo contexto, aunque esten ubicados fisicamente en sitios diferentes.

Solucion: eliminar las paginas repetidas o renombrar sus declaraciones en el codebehind


No hay comentarios: