visual studio net microsoft instalar framework c# visual-studio-2010 .net-2.0 windows-8

c# - studio - Error "No se pudo cargar el archivo o el ensamblaje del sistema. Dibujo o una de sus dependencias" en.Net 2.0, VS2010 y Windows 8



net framework 2.0 windows 10 32 bits (11)

Recibo una excepción FileNotFoundException en un proyecto de aplicación de Windows Forms, con el siguiente mensaje:

Could not load file or assembly ''System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'' or one of its dependencies. The system cannot find the file specified.

Para replicar el problema:

  • Seleccione Nuevo, Proyecto, elija .Net Framework 2.0 como destino y elija Aplicación de Windows Forms como tipo de proyecto.
  • En las propiedades del formulario creado de forma predeterminada, seleccione un valor para la propiedad Icono. Cualquier archivo .ico servirá. Esto incrustará el archivo en el archivo resx.
  • Compila y ejecuta la aplicación.

Cuando hago esto, el programa detiene en la línea this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); con la siguiente excepción:

System.IO.FileNotFoundException was unhandled Message=Could not load file or assembly ''System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'' or one of its dependencies. The system cannot find the file specified. Source=mscorlib FileName=System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

Obtengo esto en Visual Studio 2010 SP1, recientemente instalado en Windows 8 Developer Preview. Si cambio las propiedades del proyecto para apuntar a .Net Framework 4, el error desaparece.

En el archivo Form1.resx, puedo ver que la versión del ensamblado System.Drawing se indica explícitamente como 2.0:

<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

¿Algunas ideas?


Este problema puede ocurrir si se usa la vista previa de .net 4.5 para crear los archivos de recursos.

Tengo el mismo problema en mi computadora portátil (Windows 7, VS2010 Premium, VS11 Developer Preview). Tengo este problema con un proyecto de formularios simples cuando digo ''localizable = true'' en un formulario. En mi caso no hay datos de imagen involucrados. El proyecto se establece en .net 3.5

private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); this.SuspendLayout(); // // Form1 // resources.ApplyResources(this, "$this"); //exception Could not load file or assembly ''System.Drawing, Version=4.0.0.0,

Si luego copio este proyecto a otra máquina (Windows 7, VS2010 Premium) y trato de depurarlo, el error permanece. El error desaparece si limpio la solución (no el proyecto) (o borro el contenedor / obj a mano) Si luego copio esta solución a mi computadora portátil, el error desaparece, pero no puedo ver el formulario nuevamente en la vista de diseño ''Error message: at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)''

El motivo de todo esto parece ser la versión .net en los archivos * .Designer.cs.

  1. Versión en tiempo de ejecución: 4.0.30319.239 en la computadora donde trabaja,
  2. Versión en tiempo de ejecución: 4.0.30319.17020 en la computadora portátil donde obtengo la excepción.

¿Alguien puede decirme dónde puedo configurar qué versión de resgen se usa cuando se trata de proyectos .net 3.5?


Esto es un error. Yo también lo he visto. Ocurre porque su archivo .resx apunta a la versión 4.0.0.0 de System.Drawing donde no existe uno. Para superar este problema, generalmente edito el .resx en el bloc de notas para cambiar 4.0.0.0 a 2.0.0.0. El error se introduce siguiendo los pasos exactos que ha descrito.


Esto no es relevante para la situación del OP, pero si está obteniendo este error en relación con el uso de la clase ResourceWriter para convertir un archivo .resx en un archivo .resources , .resources leyendo. Me encontré con este error y la única forma de solucionarlo fue escanear los datos de "System.Drawing, Version=4.0.0.0" y reemplazarlos con "System.Drawing, Version=2.0.0.0" . Aquí está mi código (esto es parte de una modificación de Roslyn):

/// <summary> /// Method that gets called by ManagedResource.WriteData() in project CodeAnalysis during code /// emitting to get the data for an embedded .resx file. Caller guarantees that the returned /// MemoryStream object gets disposed. /// </summary> /// <param name="resourceFullFilename">full path and filename for .resx file to embed</param> /// <param name="targetLessThan4">true if necessary to change System.Drawing from 4.0.0.0 to 2.0.0.0</param> /// <returns>MemoryStream containing .resources file data for the .resx file</returns> [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] private static MemoryStream ProvideResourceDataForResx(string resourceFullFilename, bool targetLessThan4) { MemoryStream shortLivedBackingStream = new MemoryStream(); using (ResourceWriter resourceWriter = new ResourceWriter(shortLivedBackingStream)) { using (ResXResourceReader resourceReader = new ResXResourceReader(resourceFullFilename)) { IDictionaryEnumerator dictionaryEnumerator = resourceReader.GetEnumerator(); while (dictionaryEnumerator.MoveNext()) { string resourceKey = dictionaryEnumerator.Key as string; if (resourceKey != null) // Should not be possible resourceWriter.AddResource(resourceKey, dictionaryEnumerator.Value); } } } // Get reference to the buffer used by shortLivedBackingStream, which is now closed because // resourceWriter was disposed. If relevant, fix version number for System.Drawing. byte[] backingStreamBuffer = shortLivedBackingStream.GetBuffer(); if (targetLessThan4) ChangeSystemDrawingVersionNumber(backingStreamBuffer); // Create new MemoryStream because shortLivedBackingStream is closed return new MemoryStream(backingStreamBuffer); } /// <summary> /// Method to change the System.Drawing version number from "4.0.0.0" to "2.0.0.0" in the /// binary data that represents a .resources file. This implementation is based on the /// assumption that character data in the .resources file is in UTF-8 encoding. /// </summary> private static void ChangeSystemDrawingVersionNumber(byte[] dataBuffer) { byte[] byteArray1 = Encoding.UTF8.GetBytes("System.Drawing, Version=4.0.0.0"); byte[] byteArray2 = Encoding.UTF8.GetBytes("System.Drawing, Version=2.0.0.0"); for (int i = 0; i < dataBuffer.Length - byteArray1.Length; i++) if (ArrayEquals(byteArray1, dataBuffer, i)) Array.Copy(byteArray2, 0, dataBuffer, i, byteArray2.Length); } /// <summary> /// Method to test for a byte array in a larger byte array that is being searched. No error /// checking is done - it''s assumed an indexing error is not possible. /// </summary> private static bool ArrayEquals(byte[] searchArray, byte[] searchedArray, int searchedArrayIndex) { for (int i = 0; i < searchArray.Length; i++) if (searchArray[i] != searchedArray[searchedArrayIndex + i]) return false; return true; }

Edición: en una versión anterior de esta respuesta, utilicé un método ResourceWriter.TypeNameConverter . Eso funcionó en algunas situaciones, pero no en otras, y hay un informe de error que indica que puede haber problemas con ese código, al menos para el código correspondiente en .Net Core: https://github.com/dotnet/corefx/issues/11083 .


Hace poco recibí el mismo mensaje de error cuando un cliente me pidió que degradara una aplicación.

Usando Visual Studio 2010 Professional, cambié el marco de destino de .NET Framework 4 a .NET Framework 3.5. La construcción luego falló con el mensaje de error especificado. La solución fue eliminar el archivo de imagen que causa el problema de los recursos de la aplicación. Añadiéndolo de nuevo, la versión de System.Drawing fue listada como 2.0.0.0, y la construcción tuvo éxito.


He encontrado una posible solución, por favor intente esto:

Abra el archivo resx en el Diseñador y configure el modificador de acceso de público a ninguna generación de código.

Edit: hay una solución, pero muy molesto sin embargo.

  1. Abra el formulario en Designer y realice los cambios necesarios en la GUI. Cerrar el diseñador y guardar
  2. Compile el proyecto y reciba el error de compilación RESX (solo los formularios con Imagelist deben tener este problema)
  3. Haga doble clic en resx compile error para abrir el archivo resx.
  4. Desplácese hasta la parte superior de imagestream.
  5. Editar la línea superior de la actividad de la fuente de correo electrónico de la fuente de correo electrónico de la fuente de correo electrónico.
  6. Cierra y guarda el archivo resx y recompila.

** NOTA: la única diferencia son los caracteres en el extremo "j00LjAuMC4w ''a" j0yLjAuMC4w "Esto debe hacerse CADA VEZ que abra el formulario en el modo Diseñador.

Microsoft dice que lo van a arreglar en la próxima versión de VS ...

Fuente: http://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020


Me encontré con el mismo problema y ninguna de las sugerencias anteriores me funcionó, así que hice lo siguiente:

Abre tu proyecto
Ir al Explorador de soluciones
Expandir el grupo de referencia
Borrar la referencia de System.Drawing
Haga clic derecho en el grupo de referencia
Añadir referencia
En la pestaña ".NET", busque System.Drawing para agregar la referencia correcta



También he experimentado este problema, y ​​en mi caso, la causa fue la creación de dos proyectos esencialmente duplicados en paralelo, uno dirigido a .NET 2.0 y el otro a .NET 4.0, ambos en su mayoría con el mismo código y recursos. Si el momento era el correcto, el proyecto 2.0 tomaría un archivo de salida del proyecto 4.0 y terminaría haciendo referencia a las bibliotecas 4.0.

Lo arreglé construyendo los proyectos en serie, haciendo que uno dependiera del otro.

(Aprecio que probablemente esta no fue la causa del problema original publicado por @Leonardo, pero puede ser útil para los futuros visitantes que encuentren este error con una configuración similar de proyecto dual).


Tuve el mismo problema ... con mi proyecto de framework 2.0 seguir haciendo referencia a 4.0 dll. La forma en que pude solucionarlo ... simplemente vaya a la referencia del proyecto -> seleccione "Syste.Drawing" -> Propiedades y seleccione usar la versión exacta = verdadera

Esto obligará a utilizar 2.0 dll framework.

Espero que esto ayude.

¡¡¡Aclamaciones!!!


Tuve el mismo problema.

Reparé .net 4.5.1 y lo arreglé.


Tuve este problema y me pareció extraño que tenía que ver con .Net 4.5 beta. Desinstalar eso y reinstalar .Net 4.0 causó que el problema desapareciera. No estoy seguro si hay una manera de tener instalado .Net 4.5 beta y usar recursos de un proyecto .Net 2.0 simultáneamente.