La situación:
- Tengo una biblioteca de clases, llamada
RT.Servers
, que contiene algunos recursos (de tipobyte[]
, pero no creo que sea importante) - La misma biblioteca de clases contiene un método que devuelve uno de esos recursos.
- Tengo un programa simple (con una referencia a esa biblioteca) que solo llama a ese método único
Recibo un MissingManifestResourceException
mensaje con el siguiente mensaje:
No se pudieron encontrar recursos apropiados para la cultura especificada o la cultura neutral. Asegúrese de que "Servers.Resources.resources" esté correctamente incrustado o vinculado en el ensamblado "RT.Servers" en el momento de la compilación, o que todos los ensambles de satélite necesarios sean cargables y estén totalmente firmados.
Nunca he jugado con culturas o con la firma de asambleas, así que no sé qué está pasando aquí. Además, esto funciona en otro proyecto que usa la misma biblioteca. ¿Algunas ideas?
Respuestas:
Todo lo que necesitaba hacer para solucionar este problema era hacer clic derecho en el
Resources.resx
archivo en el Explorador de soluciones y hacer clic en Ejecutar herramienta personalizada . Esto vuelve a generar elResources.Designer.cs
archivo autogenerado .Si el archivo .resx se agregó al proyecto manualmente, la propiedad Herramienta personalizada del archivo debe establecerse en "ResXFileCodeGenerator".
El problema se debe a una falta de coincidencia de los espacios de nombres, que ocurre si cambia el "espacio de nombres predeterminado" del ensamblado en la configuración del proyecto. (Lo cambié de (anteriormente)
"Servers"
a (ahora)"RT.Servers"
.)En el código generado automáticamente en
Resources.Designer.cs
, hay el siguiente código:La cadena literal
"Servers.Resources"
tuvo que ser cambiada a"RT.Servers.Resources"
. Lo hice manualmente, pero ejecutar la herramienta personalizada lo habría hecho igualmente bien.fuente
Hoy me encontré con este problema y encontré esta página de Ayuda y soporte técnico de Microsoft que realmente solucionó el problema.
Tenía un par de delegados en la parte superior de mi archivo, en el espacio de nombres global, y de repente recibí un mensaje
MissingManifestResourceException
al ejecutar el programa, en esta línea:Luego moví a los delegados al espacio de nombres, obtuve el mismo error. Finalmente puse a los delegados en la única clase en ese archivo, y el error desapareció, pero no quería que los delegados en esa clase o espacio de nombres.
Luego me encontré con ese enlace de arriba, que decía
Puse a los delegados (que no consideraría "definiciones de clase") en la parte inferior de ese archivo, fuera del espacio de nombres local, y el programa no obtuvo
MissingManifestResourceException
más. Qué error tan irritante. Pero, eso parece una solución más robusta que modificar el código generado automáticamente :)fuente
Me he encontrado con un problema similar y, aunque sé que no es la causa que tuvo el OP, lo publicaré aquí para que si alguien más se encuentra con este problema en el futuro haya una respuesta disponible.
Si agrega una clase antes de la clase de diseñador, obtendrá una
MissingManifestResourceException
excepción en tiempo de ejecución (sin error ni advertencia de tiempo de compilación) porquePara (ligeramente) más información, vea esta publicación .
fuente
Tuve el mismo problema, pero el uso del comando Ejecutar herramienta personalizada como lo sugirió Timwi no ayudó en mi caso.
Sin embargo, me llevó en la dirección correcta, porque terminé en las Propiedades del archivo .resx . Aquí noté una diferencia con otro archivo .resx que no causó problemas.
En mi caso, tuve que cambiar la propiedad "Build Action" de "Resource" a "Embedded Resource".
Mi mejor conjetura es que tenía el .resx en una biblioteca que se usó desde otra aplicación. Mi aplicación no tenía su propio archivo .resx , por lo que tuvo que usar el de la biblioteca, que solo está disponible cuando está incrustado en la biblioteca y no "independiente".
fuente
Cuando ejecuté un problema similar, en Vs 2012, resultó que la propiedad "Espacio de nombres de herramienta personalizada" del archivo resx era incorrecta (en mi caso, en realidad, no estaba configurada, por lo que el código generado generó esta excepción en tiempo de ejecución) . Mi conjunto final de propiedades para el archivo resx fue algo como esto:
fuente
Ver también: MissingManifestResourceException cuando se ejecutan pruebas después de compilar con MSBuild (.mresource tiene ruta en manifiesto)
Repito la respuesta aquí solo para completar:
Parece que agregar LogicalName al archivo del proyecto lo corrige:
es decir, la entrada de recursos incrustados en el archivo del proyecto se ve así:
Esto se detalla en: http://blogs.msdn.com/b/msbuild/archive/2007/10/19/manifest-resource-names-changed-for-resources-files.aspx
Tenga en cuenta que estamos usando un archivo .resx, pero el error todavía parece ocurrir.
Actualización: El problema con los recursos (incluido XAML) parece estar relacionado con las rutas de salida y el uso de barras diagonales hacia adelante o hacia atrás como se detalla en: ¿Por qué la modificación de los directorios de salida del proyecto causa: IOException no se manejó "No se puede encontrar el recurso 'app.xaml' ".
fuente
Me encontré con una causa diferente de este problema, que no estaba relacionada con los archivos resx. Tenía una biblioteca de clases donde AssemblyInfo.cs contenía lo siguiente:
El ensamblado no contenía ningún código WPF, tema o diccionarios de recursos. Eliminé la excepción al eliminar el atributo ThemeInfo.
No obtuve una excepción real, solo
Al ver los detalles de la excepción, el sistema solicitaba MyAssembly.g.resources
Espero que esto pueda ser de ayuda para alguien más.
fuente
No estoy seguro de que ayudará a las personas, pero este funcionó para mí:
Entonces, el problema que tuve fue que recibía el siguiente mensaje:
Estaba tratando de obtener los recursos que estaban integrados en mi proyecto de otra biblioteca de clase.
Lo que hice para solucionar el problema fue configurar el Modificador de acceso en la pestaña Proyecto-> Propiedades-> Recursos de "Interno" (accesible solo dentro de la misma biblioteca de clases) a "Público" (accesible desde otra biblioteca de clases)
Entonces corre y voilà, no más errores para mí ...
fuente
La solución dada por BlaM también funcionó para mí.
Soy un usuario de VS 2013. Después de pasar por muchas correcciones pero sin suerte, probé esto:
¡Eso es! :)
fuente
Tuve el mismo problema, pero en mi caso coloco una clase en un control de usuario que está relacionado con el control de usuario como este
La solución fue mover
MyUserControlObject
al final de la clase Usercontrol, asíespero que esto ayude
fuente
Recibí el error MissingManifestResourceException después de portar mi proyecto de VS2005 a VS2010. No tenía otras clases definidas en el archivo que contiene mi clase Form. Y también tenía mi nombre de archivo de recursos resx configurado correctamente. No funciono
Así que eliminé los archivos resx y los regenere. Todo bien ahora.
fuente
Recientemente me encontré con el mismo problema, luché un poco, encontré este tema pero no hubo respuestas correctas para mí.
Mi problema fue que cuando quité ventana principal de mi proyecto WPF (que no tiene una ventana principal), se me olvidó quitar
StartupUri
deApp.xaml
. Creo que esta excepción puede ocurrir si tiene un error enStartupUri
, por lo que en caso de que si alguien está luchando con esto - compruebe suStartupUri
enApp.xaml
.fuente
Recientemente me topé con este problema, en mi caso hice algunas cosas:
Asegúrese de que los espacios de nombres sean coherentes en el archivo Designer.cs del archivo resx
Asegúrese de que el espacio de nombres predeterminado del ensamblaje (haga clic con el botón derecho en el proyecto y elija Propiedades) esté configurado de la misma manera que el espacio de nombres en el que se encuentra el archivo de recursos.
Una vez que hice el paso 2, la excepción desapareció.
fuente
Tuve este problema cuando agregué otra clase en el archivo justo antes de la clase que derivaba de Form. Agregarlo después de solucionar el problema.
fuente
También puede ocurrir el mismo error cuando coloca una nueva clase en el código fuente de la clase de un formulario creado por el diseñador.
Esta nueva clase se puede eliminar y colocar en un archivo cs diferente.
(Al menos en mi caso, este era el problema ...)
fuente
Porque estoy precompilando mi aplicación web (usando la función de publicación VS2012). Estaba recibiendo el error anterior. Intenté todas las sugerencias, ¡pero cambiar extrañamente 'Build Action' por 'Content' hizo el truco!
fuente
En mi caso, tengo una API web con recursos y creo un paquete nuget a partir de eso. Cuando uso este nuget en otros proyectos, me doy cuenta de que cuando solicito una API con recursos,
MissingManifestResourceException
obtengo un poco de investigación, aprendo que nuget packager no empaca recursos automáticamente. Si desea utilizar archivos de recursos, debe hacerlo manualmente. Por lo tanto, debe agregar las siguientes líneas a su archivo .nuspec: (Visite https://github.com/NuGet/Home/issues/1482 )Pero, antes de agregar archivos, debe asegurarse de qué versión de .net está utilizando.
fuente
Tuve el con un proyecto F # recién creado. La solución fue desmarcar "Usar nombres de recursos estándar" en las propiedades del proyecto -> Aplicación -> Recursos / Especificar cómo se administrarán los recursos de la aplicación. Si no ve la casilla de verificación, actualice su Visual Studio. Tengo 15.6.7 instalado. En 15.3.2 esta casilla de verificación no está allí.
fuente
Solo por mencionar. Si usa una constante o literal, asegúrese de que se refiera a un recurso del formulario
ProjectName.Resources
y no contengaResources.resx
.Podría ahorrarte una o dos horas.
fuente
He encontrado este problema con el proyecto C ++ administrado basado en WinForms después de cambiar el nombre del espacio de nombres global (no manualmente, sino con la herramienta Cambiar nombre de VS2017).
La solución es simple, pero no se menciona en otra parte.
RootNamespace
Debe cambiar la entrada en vcxproj-file para que coincida con el espacio de nombres de C ++.fuente
En mi caso, fue un error tipográfico en el Xaml de una ventana abierta desde Winforms Form:
Incorrecto:
<Image Source="/Resources/WorkGreen.gif"/>
Correcto:
<Image Source="../Resources/WorkGreen.gif"/>
puede ayudar a alguienfuente
Desde la página de soporte de Microsoft :
Para evitar este problema, especifique el nombre del archivo .resources cuando ejecute Resgen.exe. Mientras especifica el nombre del archivo .resources, asegúrese de que el nombre del archivo comience con el nombre del espacio de nombres de su aplicación. Por ejemplo, ejecute el siguiente comando en el símbolo del sistema de Microsoft Visual Studio .NET para crear un archivo .resources que tenga el nombre del espacio de nombres de su aplicación al comienzo del nombre del archivo:
fuente