'Rectángulo' no existe en el espacio de nombres 'System.Drawing'

Utilizando .NET 2.0.

System.Drawing está en mi lista de referencias.

Aquí está mi using declaración:

using System.Drawing;

Aquí está el código:

private static Rectangle rScreen;

Aquí está el error en esta línea:

Texto de error: el tipo o el nombre del espacio de nombres 'Rectángulo' no existe en el espacio de nombres 'System.Drawing' (¿le falta una referencia de ensamblado?)

¿Por qué?

EDITAR: Código de compilación agregado:

Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("CompilerVersion", "v3.5");

CSharpCodeProvider codeProvider = new CSharpCodeProvider(dict);

CompilerParameters parameters = new CompilerParameters();

{
    parameters.ReferencedAssemblies.Add("System.Drawing.dll");

    parameters.ReferencedAssemblies.Add("System.dll");

    parameters.ReferencedAssemblies.Add("System.Core.dll");

    parameters.ReferencedAssemblies.Add("System.Data.dll");

    parameters.ReferencedAssemblies.Add("System.Data.Linq.dll");

    parameters.ReferencedAssemblies.Add("System.DirectoryServices.dll");

    parameters.ReferencedAssemblies.Add("System.Configuration.dll");

    parameters.ReferencedAssemblies.Add("System.Web.dll");

    parameters.ReferencedAssemblies.Add("System.Xml.dll");

    parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");

    parameters.ReferencedAssemblies.Add("System.Web.Services.dll");

    parameters.ReferencedAssemblies.Add("System.ServiceModel.dll");

    parameters.ReferencedAssemblies.Add("System.IdentityModel.dll");

    parameters.ReferencedAssemblies.Add(string.Format(@"{0}{1}Microsoft.ReportViewer.Common.dll", AppDomain.CurrentDomain.RelativeSearchPath, @"\ReportViewer\"));

    parameters.ReferencedAssemblies.Add(string.Format(@"{0}{1}Microsoft.ReportViewer.WebForms.dll", AppDomain.CurrentDomain.RelativeSearchPath, @"\ReportViewer\"));
}

CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sources.ToArray());

try
{
    ApexAssemblyManager.dynamicAssemblies.Add(hashKey, new DynamicAssemlby(results.CompiledAssembly));

    return ApexAssemblyManager.dynamicAssemblies[hashKey].CreateInstance(typeName);
}

Todos los demás ensamblajes referenciados funcionan y han estado funcionando durante mucho tiempo. Esta es la primera vez que tengo un error de este tipo.

Me aseguré y verifiqué dos veces que se agregó la referencia. Si intento agregarlo al proyecto nuevamente, recibo un mensaje de que la referencia ya existe.

Muchas Gracias

preguntado el 16 de mayo de 11 a las 17:05

¿Es esto con Visual Studio? ¿Obtienes un pequeño cuadrado rojo en la parte inferior derecha de la palabra? Rectangle en el editor con una corrección sugerida? Puedes escribir System.Drawing.Rectangle en su lugar y funcionará? -

Se compila bien en Visual Studio. Esto se ejecuta como compilado dinámicamente en otra aplicación que tiene la instrucción using en él. -

a) intente con el alcance completo del tipo yb) ¿su declaración está dentro del alcance de la using ¿declaración? c) Edite la pregunta con una explicación de lo que se compila dinámicamente. -

Publique el código de compilación. Ese es el código que falla en este escenario. Además, ¿tiene .NET 4 instalado en su máquina de desarrollo? ¿Está seguro de que hace referencia a las versiones correctas de los ensamblados a los que se hace referencia? -

1 Respuestas

En los comentarios y etiquetas, indica que esto lo está compilando dinámicamente otra aplicación. Por tanto, es probable que esta otra aplicación no incluya System.Drawing.dll como referencia al realizar la compilación y, por tanto, el tipo no está resuelto. No basta con decir simplemente using System.Drawing, el ensamblado que define ese espacio de nombres y sus tipos también debe pasarse al compilador.

En el código, esto se hace usando un CompilerParameters instancia pasada a través de uno de los CompileAssemblyFrom... llamadas al CodeDomProvider instancia que está realizando la compilación (en este caso, el CSharpCodeProvider). La CompilerParameters.ReferencedAssemblies colección indica al compilador qué ensamblados debe mirar cuando se intenta realizar la resolución de tipos.

Noticias
Intente agregar explícitamente mscorlib a las referencias.

Además, no sé si esto está relacionado, pero como mencionaste un servidor (¿es un servicio de algún tipo?), Estados de MSDN:

Las clases dentro del espacio de nombres System.Drawing no se admiten para su uso dentro de un servicio de Windows o ASP.NET. Intentar utilizar estas clases desde uno de estos tipos de aplicaciones puede producir problemas inesperados, como una disminución del rendimiento del servicio y excepciones en el tiempo de ejecución. Para obtener una alternativa compatible, consulte Componentes de imágenes de Windows.

Yo diría que esto califica como un problema inesperado, aunque no esperaría que los problemas se manifiesten durante un proceso de compilación, sino al ejecutar el código. Dicho esto, realmente no especifican eso en la documentación, por lo que podría aplicarse al uso de System.Drawing.dll como referencia en general.

contestado el 17 de mayo de 11 a las 18:05

Sí, lo tengo: parameters.ReferencedAssemblies.Add ("System.Drawing.dll"); Incluso intenté cambiar el orden en relación con los otros ensamblados referenciados. Sí, me estoy quedando sin ideas. - user390480

@ user390480: Pero no lo encuentra. ¿Está seguro de que la resolución de tipo lo ubica correctamente? ¿Sabes qué caminos busca cuando busca ensamblajes? Publique su código de compilación, tal vez haya un error allí. - Jeff Yates

En mi máquina local, la versión de System.Drawing.dll es 2.0.50727.5420 mientras que en el servidor la versión es 2.0.50727.3053. ¿Eso haría una diferencia? - user390480

@ user390480: ¿Qué funcionó? Era que mscorlib ¿O lo de los "problemas inesperados"? Estoy intrigado. - Jeff Yates

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.