Puede recibir un mensaje de error "System.Resources.MissingManifestResourceException" al acceder el archivo .resources del formulario en tiempo de ejecución

Síntomas

Cuando se ejecuta su Visual Basic .NET o Visual Basic 2005, Visual C# .NET o aplicación Windows de Visual J#. NET, puede recibir el mensaje de error siguiente o uno similar cuando se carga un formulario:
Se ha producido una excepción no controlada del tipo 'System.Resources.MissingManifestResourceException' en mscorlib.dll

Información adicional: no se pudo encontrar los recursos adecuados para la referencia cultural especificada (o la referencia cultural neutra) en el ensamblado especificado. Asegúrese de que "Form1.resources" fue correctamente ensamblado incrustado o vinculado en "myApplication".

baseName: Form1 locationInfo: WindowsApplication4.Form1 nombre de archivo de recursos: ensamblado Form1.resources: myApplication, versión = 1.0.781.33026, Culture = neutral, PublicKeyToken = null
Si hace clic en dividir en el cuadro de diálogo de error y, si está ejecutando el código en el entorno de desarrollo integrado (IDE), descubre que una línea de código dentro de la instrucción InitializeComponent provoca este problema. Por ejemplo, si crea en el ejemplo de la sección "Más información", este error se produce junto con un control ImageList . Aunque el mensaje de error puede referirse a otro control, observe que recursos. GetObject aparece en esa línea de código en el mensaje de error:
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));

Causa

Este problema se produce porque la clase de formulario no es la primera clase en el módulo de código del formulario.

Nota: Este específico de uno de documentos artículo causa de este problema. Puede haber otras situaciones que pueden conducir a resultados similares.

Solución

Para resolver este problema, mueva todas las otras definiciones de clase de forma que aparezcan después de la definición de clase del formulario.

Solución alternativa

Para evitar este problema, cambie la propiedad Nombre de archivo de recursos del archivo .resX del proyecto. Para ello, siga estos pasos:
  1. Inicie Visual Studio .NET 2003 o Visual Studio 2005.
  2. Abra el proyecto que contiene la clase de formulario localizada donde recibirá el mensaje de error que se menciona en la sección "Síntomas".
  3. En el Explorador de soluciones, expanda todas las carpetas.
  4. Haga clic derecho en Form1.resXy, a continuación, haga clic en Propiedades.
  5. En el cuadro de diálogo Páginas de propiedades de Form1.resX , expanda Propiedades de configuracióny, a continuación, haga clic en General en Recursos administrados.
  6. Cambie la propiedad de Nombre de archivo de recursos de $(IntDir) / < marcador de posición > . Form1.resources a $(IntDir) / < marcador de posición >. .Resources MyForm y, a continuación, haga clic en Aceptar.

    Nota: MyForm es un marcador de posición para el nombre de clase de la clase form que se adapta.
  7. Presione CTRL + MAYÚS + S para guardar el proyecto. Presione CTRL + MAYÚS + B para generar la solución. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

    CORREGIR 824495 : recibe un mensaje de error "MissingManifestResourceException" cuando se agrega un recurso vinculado en Visual Studio .NET 2003

  8. Presione F5 para ejecutar la aplicación. Se ejecuta la aplicación y se mostrará el formulario Form1.
.

Estado

Este comportamiento es por diseño.

Más información

Un módulo de código del formulario puede contener varias clases. Cuando se genera el proyecto, el sistema de compilación debe decidir de qué clase debe utilizar para crear el archivo ".resources". El diseño del sistema de compilación de proyecto especifica que la primera clase en el módulo de código es la clase en que se basa el archivo ".resources". El archivo .resources se denomina función de esa clase, no el nombre del formulario. En la mayoría de los casos, estos dos nombres son los mismos. Sin embargo, si estos nombres son diferentes, recibirá el mensaje de error que se menciona en la sección "Síntomas".

Cuando se carga el formulario en tiempo de ejecución, el método InitializeComponent que tenga que obtener objetos desde el archivo ".resources". InitializeComponent busca el archivo .resources nombre_formularioen el ensamblado. Debido a la inicial
Nombre_formularioarchivo .resources nunca se ha creado o vinculados al ensamblado, se produce un error en el intento de recuperar el archivo ".resources".

Pasos para reproducir el comportamiento

  1. Crear un proyecto de aplicación Windows en Visual Basic .NET o en Visual Basic 2005, Visual C# .NET o Visual J#. NET. Se creará Form1 de forma predeterminada. Nota: En Visual Studio 2005, recibirá el mensaje de advertencia siguiente:
    No se puede agregar componentes en modo de localización. Seleccione (predeterminado) en la propiedad Language para volver al formulario predeterminado y agregar componentes.
    Nota: Debe cambiar el código en Visual Basic 2005. De forma predeterminada, Visual Basic crea dos archivos para el proyecto cuando se crea un proyecto de formularios Windows Forms. Si el formulario se denomina Form1, los dos archivos que lo representan se denominan Form1.vb y Form1.Designer.vb. Usted escribe el código en el archivo Form1.vb. El Diseñador de Windows Forms escribe el código en el archivo Form1.Designer.vb. El Diseñador de Windows Forms utiliza la palabra clave partial para dividir la implementación de Form1 en dos archivos independientes. Este comportamiento evita que el código generado por el diseñador se mezcle con el código.

    Para obtener más información acerca de las nuevas mejoras del lenguaje Visual Basic 2005, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

    Para obtener más información sobre las clases parciales y el Diseñador de Windows Forms, visite el siguiente sitio Web de MSDN:

  2. Agregue un control ImageList a Form1.
  3. Agregar un archivo de icono en el control ImageList .
  4. En el módulo de código de Form1, agregue el código siguiente antes de la definición de Form1: .NET de Visual Basic:
    Public Class someClassEnd Class

    C# Visual .NET y Visual J#. NET:
    public class someClass{
    }

  5. Genere el proyecto. Observe que el proyecto se compila correctamente.
  6. Ejecute el proyecto. Observe que recibe el mensaje de error que se menciona en la sección "Síntomas".
Propiedades

Id. de artículo: 318603 - Última revisión: 9 ene. 2017 - Revisión: 1

Comentarios