c# - puede - El tipo o espacio de nombres<blah> no existe
error cs0234 el tipo o el nombre del espacio de nombres (11)
Ok, he tenido este un millón de veces antes y ha sido respondido 1 millón +1 veces antes.
Y sin embargo, una vez más. Tengo 3 proyectos, A, B y C, cada uno un archivo DLL. Cada proyecto es .Net 4.0 (no la compilación del cliente, 4.0 completo). El proyecto C hace referencia a A y B. Se hace referencia a ellos como proyectos, y la salida se establece para copiarse localmente.
En C, tengo dos declaraciones de uso en mi archivo .cs:
using A;
using B;
Cuando compilo, recibo la queja que no puede encontrar B. A está bien. B depende de A.
¿Qué diablos debo hacer? Quité y re-agregué, cerré VS2010, lo volví a abrir, miré el archivo .csproj. Y simplemente no puedo conseguirlo. De nuevo, por millonésima vez.
¡Alguien, por favor, siénteme lo suficiente como para que aprenda la fuente de esto de una vez por todas!
Y sí, esto probablemente se responde en algún lugar de StackOverflow, pero no en ninguna de las respuestas principales que he comprobado hasta ahora. Los términos son demasiado genéricos para ser de utilidad, demasiadas preguntas donde la respuesta es "duh, agrega una referencia". Estoy más allá de ese punto.
Aquí están los errores que recibo. Hay 3 tipos, pero de la experiencia pasada, el último es el verdadero.
Error 130 ''AWI.WWG.EXPMRI.MriUpload.Data.MriUpload'' does not contain a definition for ''Database'' and no extension method ''Database'' accepting a first argument of type ''AWI.WWG.EXPMRI.MriUpload.Data.MriUpload'' could be found (are you missing a using directive or an assembly reference?)
Error 114 ''object'' does not contain a definition for <blah>
Error 59 The type or namespace name ''<blah>'' could not be found (are you missing a using directive or an assembly reference?)
Ajá miré las advertencias, no solo los errores, y esto es lo que veo:
Warning 69 The referenced project ''../../../../../../../Partners/integration/framework/connectors/Partners.Connectors.Base/Partners.Connectors.Base/Partners.Connectors.Base.2010.csproj'' does not exist. AWI.WWG.EXPMRI.MriUpload.Objects
Ese archivo .csproj es la "B" en este caso. Aunque elimino y vuelvo a agregar la referencia del proyecto, obtengo esto. ¡Pero se siente como si me estuviera acercando!
Hmm, acabo de encontrar otra DLL, llámela "D", a la que hace referencia "A". Cuando lo agrego al proyecto, comienzo a recibir la queja:
----------------
The Add Reference Dialog could not be shown due to the error:
The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
----------------
¿Podría esto ser relacionado, o simplemente otra distracción?
Ok, encontré el problema, aunque no lo entiendo.
Cuando agrego la referencia a través del IDE, agrega esto al archivo csproj de "C":
<ProjectReference Include="../../../../../../../Partners/integration/framework/connectors/Partners.Connectors.Base/Partners.Connectors.Base/Partners.Connectors.Base.2010.csproj">
Esto no se compila, advierte que no puede encontrar el proyecto al que se hace referencia, entonces todos esos ERRORES suceden. Pero luego cambio la ProjectReference a lo siguiente:
<ProjectReference Include="C:/.../Partners.Connectors.Base.2010.csproj">
... Y funciona bien. Tenga en cuenta que ninguna de esas rutas tiene nada que ver con 256 caracteres. El completo es de 135 caracteres. Pero quizás el IDE esté haciendo alguna decoración tonta del camino.
Básicamente, esto suena como una referencia que falta.
Algunos de los controles de cordura que se me ocurren son:
- ¿Estás seguro de que el proyecto que genera el error es C?
- ¿Está seguro de que no cometió un error de ortografía en el espacio de nombres B en su uso?
- ¿Puede haber habido algún error de compilación en B antes de compilar C? (Eso puede hacer que el compilador no encuentre el espacio de nombres en B).
- ¿Tienes algún otro error de compilación o advertencia?
Editar
Otra sugerencia: ¿se define la clase en la asamblea B como public
?
Comencé a recibir este error de repente mientras trataba de resolver otro problema.
Resolví esto yendo a Solución => propiedades => dependencias del proyecto y todas las dependencias estaban desactivadas para los dos proyectos en los que recibía un error de espacio de nombres. Marqué las casillas de verificación y reconstruí la solución sin errores.
Con VS2017, se me ocurrió este problema cuando se descargó el proyecto de mi solución.
Cree un proyecto limpio y pruebe conjuntos mínimos de ensamblajes que use en su proyecto. De esta manera, se asegurará de que haya algo malo en su solución o si el proyecto recién creado tiene los mismos síntomas. Si es así, entonces quizás VS, .net, etc. esté dañado o algo así.
Después de muchas horas de frustración, descubrí el siguiente proceso para resolver este problema con una solución VS2017:
Insure that all reference assemblies have been recognized and have current properties.
If assemblies do not show proper reference, right click the entry
and view properties. This action often resets the reference. This
action must be completed for each project in the solution.
After resolving all references, if the error continues, delete the
following:
-The Obj folder
-The Bin folder
-Reference to the offending assembly
-Clean and Rebuild the solution. Errors should occur.
-Re-reference the needed assembly.
The editor should no longer show the namespace error and build should succeed.
La solución tiene que ver con los límites de la ruta del archivo en Windows y la forma en que el IDE traduce las rutas relativas a las completas, como se explica en este blog .
La solución inmediata es editar el archivo csproj manualmente para usar la ruta absoluta. Hasta que se vuelva a agregar la referencia, la ruta absoluta será válida. Es posible que algún día acorte mis carpetas, pero no es la máxima prioridad en este momento.
Si sospecha que tiene este problema, mire los mensajes de advertencia del compilador. A menudo tengo estos apagados, solo mirando errores. Pero la advertencia sobre "el proyecto al que se hace referencia no existe" fue la pista que me lo resolvió.
En caso de que el otro enlace desaparezca, aquí está el enlace al artículo de MS. http://support.microsoft.com/kb/2516078
Vale la pena señalar que este mismo error se manifiesta para una variedad de problemas, como los problemas de orientación del marco del cliente, y se registra como una advertencia cuando no se puede cargar una referencia. Presumiblemente, el error de referencia es solo una advertencia porque si la referencia no es realmente necesaria, no importa.
Me aseguraría de que su proyecto haya incluido las referencias a los ensamblajes.
Me gustaría comprobar que el orden de compilación coincide con sus dependencias
Finalmente, si todo está configurado correctamente, debería ver el siguiente Orden de compilación:
No parece que este sea su problema, pero para completar, debo agregar que otra cosa para verificar (si su proyecto tiene como objetivo el .NET Framework 3.5 o superior) es que el Marco de destino para ambos proyectos coincida. Si está vinculando algo que se dirige al perfil del cliente desde una versión completa de Framework, también recibirá un error "no encontrado":
Obtuve esto al actualizar un proyecto que normalmente usamos a través de NuGet. Pensé que si simplemente copiaba el archivo DLL actualizado a la carpeta de paquetes, podría probarlo sin tener que configurar NuGet en mi máquina, pero no era tan simple porque mi aplicación todavía estaba buscando el número de versión anterior. Espero que ayude a alguien por ahí.
Resolví esto usando global::[namespace][type I want to use]
en C # 6.0
Sé que esta no es la respuesta a su problema, pero el error es bastante similar cuando intenta hacer referencia a un proyecto con una versión .net más alta que la que está usando. IE: no puedes hacer referencia a algo con .net 4.5 desde .net 3.5
Vaya a la sección de advertencia y resuelva todas las advertencias y habrá terminado ...
La sección de advertencia le indicará qué son necesarias todas las dependencias internas de dlls para el proyecto al que hace referencia.