2010-01-04 5 views
5

después de semanas de tener este problema finalmente me decidí a pedir una solución al siguiente problema:Cómo solucionar un problema de espacio de nombres con utilería autogenerado si MasterType se establece

En la página .aspx puede establecer

<%@ MasterType VirtualPath="~/Mastername.master" %> 

Esto se traduce en una propiedad generada automáticamente en el .aspx.designer

public new Mastername Master { 
    get { 
     return ((Masternamee)(base.Master)); 
    } 
} 

funciona perfectamente bien. Pero si hago los cambios en el archivo .aspx, la propiedad será generada auto nuevo y se ve como el siguiente:

public new NAMESPACE1.Mastername Master { 
      get { 
       return ((NAMESPACE1.Mastername)(base.Master)); 
      } 
     } 

Compilación no será posible después, porque la clase para el MasterPage no se puede resolver en el espacio de nombres dado La página maestra tiene NAMESPACE1 como espacio de nombre.

Cada página de contenido tiene el mismo NAMESPACE1. La propiedad autogenerada intenta buscar la clase de página maestra en NAMESPACE1.NAMESPACE1 que fallará, debido a que no existe. Por supuesto, puedo eliminar el primer NAMESPACE1. para hacer que la aplicación vuelva a estar disponible, pero es una mierda hacer esto casi cada vez que hago cambios en el archivo .aspx.

¿Hay alguna manera de evitar este problema? La única forma en que puedo pensar es ignorar la propiedad generada automáticamente y hacer un lanzamiento explícito cada vez que quiero tener acceso a la página maestra.

Editar: Estoy usando Visual Studio 2008 Professional SP1.

+0

Por cierto, nunca he tenido ese problema después de actualizar a VS2010 – citronas

Respuesta

0

he encontrado una solución que funciona. No usaré la propiedad autogenerada en el archivo de diseñador. Escribiré mi propia propiedad de contenedor que implemento en cada página de contenido.

+1

que no es muy satisfactorio en absoluto. – mcoolbeth

+0

@mcoolbeth: ¿encontraste una mejor solución? – citronas

+0

@citronas: lamentablemente, no. Me disculpo si mi comentario fue despectivo. Fue pensado para ser comprensivo. Voy a publicar una respuesta aquí si encuentro una solución más limpia. – mcoolbeth

1

Por alguna razón, el diseñador cree que la página maestra está definida en el espacio de nombres NAMESPACE1, por lo tanto, mire la definición de la página maestra (y el código detrás) para verificar que su espacio de nombre no haya sido modificado (posiblemente accidentalmente).

Si no hay nada obvio, puede ser necesaria una búsqueda en todos los archivos (* .cs, * .aspx, * .master, ...) para NAMESPACE1.

(Esto es donde el uso de VCS ayudaría --- podrías comprobar el historial de cambios.)

+0

Este problema se produce en los proyectos serveral diferentes. El espacio de nombres de la página maestra no había cambiado en ninguno de estos proyectos. – citronas

1

Actualmente es más una "característica" de diseñador. ;-)

El nombre principal utilizado en su archivo de diseñador se extraerá de la propiedad Inherits de su archivo .Master. Así que cambie la forma en que califica el atributo Hereda, y eso cambiará el nombre de clase usado cuando se crea el archivo de diseñador.

+0

cambiar a qué? – pashute

0

Tuve el mismo problema cuando agregué <%@ MasterType VirtualPath="~/TestMaster.Master" %> a mi página aspx en la vista SOURCE. Por alguna razón, la página nunca se creó correctamente y siguió dándome errores de espacio de nombres no válidos hasta que cambié a la vista DISEÑO y cambié el tamaño de un control y, finalmente, el error desapareció. En algún lugar estaba usando algunos datos almacenados en caché (incluso una Solución Build/Clean no lo borró) y hasta que el diseñador recrea la página, genera ese error.

0

Cambio

<%@ MasterType VirtualPath="~/Mastername.master" %> 

a

<%@ MasterType TypeName="Mastername" %> 

esto funcionará perfectamente

Cuestiones relacionadas