¿Visual Studio 2010 de repente no puede ver el espacio de nombres?

83

Mi solución C # WinForms tiene dos proyectos. Una DLL, que es el proyecto principal en el que estoy trabajando, y un WinForms ejecutable al que llamo "Sandbox" para poder compilar / ejecutar / depurar la DLL fácilmente de una sola vez.

Estoy trabajando en .Net 4.0 para ambos proyectos.

Todo funcionaba bien hasta que agregué un código aparentemente inocente y una referencia a System.Web en la DLL. Ahora mi proyecto Sandbox no puede ver el espacio de nombres del proyecto DLL. No cambié nada que creo que debería haber afectado esto.

Si elimino la referencia del proyecto a la DLL de las referencias de Sandbox y la vuelvo a agregar, los subrayados rojos desaparecen y la codificación de colores vuelve para todas mis clases, etc. pero tan pronto como trato de construir la solución, todo se desmorona nuevamente.

Cuando hago clic con el botón derecho en el proyecto DLL en las referencias de Sandbox y lo veo en el navegador de objetos, puedo ver el espacio de nombres y todas las cosas allí.

¿Tengo la sensación de que esto podría ser algún tipo de error?

¿Es esto algún tipo de error VS2010? Tuve este mismo problema hace unos meses y solo pude solucionarlo en ese momento haciendo un proyecto completamente nuevo y volviendo a importar mis archivos. Esta vez, sin embargo, tengo un billón de archivos y solo lo haré como último recurso.

Editar: Después de pasar con pánico y deshacer todos mis cambios, tratando de encontrar qué causó los problemas, parece ser esta línea:

string url = "http://maps.google.com?q=" + HttpUtility.UrlEncode(address);

Si comento esta línea, no obtengo errores de espacio de nombres y el proyecto se construye bien. Sin embargo, no veo nada malo en esta línea.

Ozzah
fuente

Respuestas:

149

Estoy listo para declarar esto como un error en VS2010, esto ya ha afectado a demasiados programadores. La solución es fácil: Proyecto + Propiedades, pestaña Aplicación, cambie Target Framework a ".NET Framework 4" en lugar del Perfil de cliente que está seleccionado de forma predeterminada.

System.Web no está incluido en el perfil del cliente. Tener esta opción en primer lugar es bastante tonto, el perfil del cliente es solo un 15% más pequeño que la versión completa de .NET 4.0. Tenerlo seleccionado por defecto es aún más tonto. Pero yo divago.

ACTUALIZACIÓN: afortunadamente, todo esto se solucionó en VS2012. Lo que ya no hace que el perfil del cliente sea el predeterminado para un nuevo proyecto. Y el perfil del cliente se retiró por completo en .NET 4.5, bueno.

Hans Passant
fuente
1
Gracias por eso. Mi DLL se configuró en .Net 4.0, pero el Sandbox se configuró en .Net 4.0 Client Profile. Después de trabajar en este proyecto durante 5 meses, la cantidad de pánico que sentí cuando todo se vino abajo sin ninguna razón aparente ... ¡Al menos lo sabré la próxima vez!
Ozzah
27
Este tipo de respuestas son la verdadera carne y papas de este sitio. Mi fe en la humanidad se ha incrementado ligeramente y mi proyecto finalmente se compila. Gracias.
CloudMeta
1
He cambiado Target Framework a 4.0 en todos mis proyectos, sin embargo, aún no se pueden encontrar los espacios de nombres de los proyectos dependientes. ¿Hay algo más que deba asegurarme de verificar?
Steven Ryssaert
@UwConcept: no se trata del número de versión. Se trata de perfil completo vs cliente. Inicie su propia pregunta si eso no ayuda.
Hans Passant
@HansPassant Sí, lo siento si mi pregunta fue confusa. Estaba usando la versión 4.0 Client y la cambié a 4.0. Aún así, los espacios de nombres en otros proyectos de mi solución no se pueden encontrar entre proyectos.
Steven Ryssaert
8

Verifique para asegurarse de que ambos proyectos estén usando el perfil de no cliente para su marco de destino (vaya a las propiedades de cada proyecto para hacer esto).

Mark Avenius
fuente
Gracias Mark. Hans y tú lo clavaron en la cabeza, esto lo arregló.
Ozzah
2

Una posibilidad es que la versión de .NET Framework de destino de la biblioteca de clases sea superior a la del proyecto. Enfrenté este problema y lo resolví cerrando Visual Studio, reabriendo Visual Studio, limpiando y reconstruyendo la solución. Esto funcionó para mí. En algunas otras publicaciones, he leído las respuestas y la mayoría de los usuarios resolvieron el problema siguiendo este camino.

Muhammad Sohail
fuente
1
Esta pregunta ya fue respondida satisfactoriamente hace más de cuatro años y medio.
Ozzah
+ para agregar información útil y útil sobre un error estrechamente relacionado
Eric Brown - Cal
@Ozzah, como alguien que investiga este error en 2017, definitivamente me alegra tener más información. +1
Cowthulhu
1

Intente construir solo el proyecto con Sandbox dll primero de forma independiente.

Luego, apunte su proyecto ejecutable al dll requerido y asegúrese de que copy localesté configurado en true. en la configuración de referencia.

Luego construya el proyecto ejecutable.

Robin Maben
fuente
Y por el amor de todas las cosas santas, asegúrese de que el tipo de destino esté configurado en Compilar y no en Contenido (que el mío era por alguna razón)
jcolebrand
0

Cambiar el marco de destino de ".NET Framweork 4 Client Profile" a ".NET Framework 4" funcionó para mí con un problema similar. Estoy de acuerdo en que el perfil del cliente no parece tener mucha ventaja al usarlo. Parece que me clavan los errores extraños que busco hasta que recuerdo que Visual Studio está predeterminado en el perfil del cliente. Supongo que la moraleja de la historia cuando aparece un error es: si "Reconstruir solución" no funciona, verifique el marco de Target ...

Andy
fuente
0

Si ya intentó hacer el cambio de Framework y aún no funcionó, espero que esto funcione para usted (como lo hizo para mí): simplemente agregue las referencias necesarias desde sus proyectos. Muy obvio, pero lo estaba haciendo mal hasta que encontré cuál era el problema.

lu1s
fuente
0

Acabo de tener este problema y resultó que tenía varios espacios de nombres en uso que tenían el mismo nombre de objeto (es decir, los objetos comerciales tenían los mismos nombres que los modelos mvc);

Calificar completamente los nombres solucionó el problema para mí.

Mike Cheel
fuente