2011-05-16 28 views
5

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

System.Drawing está en mi lista de referencias.

Aquí es 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 espacio de nombres el nombre 'Rectángulo' no existe en el espacio de nombres 'System.Drawing' (¿falta una referencia de ensamblado?)

¿Por qué?

EDIT: Añadido código de compilación:

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 trabajos ReferencedAssemblies y han estado trabajando durante mucho tiempo. Esta es la primera vez que tengo un error así.

Me aseguré y comprobé dos veces que se ha agregado la referencia. Si trato de agregarlo nuevamente al proyecto, recibo un mensaje de que la referencia ya existe.

Gracias

+0

¿Esto es 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á? – ja72

+0

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

+0

a) intente con el alcance total del tipo yb) ¿es su declaración dentro del alcance de la instrucción 'using'? c) Edite la pregunta con una explicación de lo que se compila dinámicamente. – ja72

Respuesta

5

estado usted en los comentarios y etiquetas que esto está siendo compilado dinámicamente por otra aplicación. Por lo tanto, es probable que esta otra aplicación no incluya System.Drawing.dll como referencia al realizar la compilación y, por lo tanto, el tipo no está resuelto. No es suficiente simplemente declarar using System.Drawing, el ensamblado que define ese espacio de nombres y sus tipos también se debe pasar al compilador.

En el código, esto se hace mediante una instancia CompilerParameters pasado a través de una de las llamadas a la CompileAssemblyFrom...CodeDomProvider ejemplo, que está llevando a cabo la compilación (en este caso, el CSharpCodeProvider). La colección CompilerParameters.ReferencedAssemblies indica al compilador qué ensamblajes mirar cuando intenta realizar una resolución de tipo.

actualización
trate de añadir explícitamente mscorlib a las referencias.

Además, no sé si esto está relacionado, pero como usted ha mencionado un servidor (es un servicio de algún tipo?), MSDN states:

clases dentro del espacio de nombres System.Drawing son no compatible con el uso dentro de un servicio de Windows o ASP.NET. Intentar utilizar estas clases desde dentro de uno de estos tipos de aplicación puede producir problemas inesperados, como como una disminución del rendimiento del servicio y excepciones de tiempo de ejecución. Para una alternativa compatible con , vea Windows Imaging Componentes.

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 más bien al ejecutar el código. Dicho esto, en realidad no lo especifican en la documentación, por lo que podría aplicarse al uso de System.Drawing.dll como referencia en general.

+0

Sí, lo tengo: parameters.ReferencedAssemblies.Add ("System.Drawing.dll"); Incluso intenté cambiar el orden relativo a las otras Asambleas Referenciadas. Sí, quedarse sin ideas. – user390480

+0

@ user390480: Pero no lo está encontrando. ¿Estás seguro de que la resolución de tipo lo está ubicando correctamente? ¿Sabes qué rutas está buscando al buscar ensamblajes? Publique su código de compilación; quizás haya un error allí. –

+0

Código de compilación agregado para publicar. – user390480

Cuestiones relacionadas