Pregunta

Usando .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 nombre del espacio de nombres 'Rectangle' no existe en el espacio de nombres 'System.Drawing' (¿falta una referencia de ensamblaje?)

¿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 ReferencedAssemblies funcionan y han estado funcionando durante mucho tiempo.Esta es la primera vez que tengo un error de este tipo.

Me he asegurado y verificado dos veces que se agregue la referencia.Si intento agregarlo al proyecto nuevamente, aparece un mensaje que indica que la referencia ya existe.

Gracias

¿Fue útil?

Solución

Usted indica en los comentarios y etiquetas que otra aplicación lo está compilando dinámicamente.Por lo 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 queda sin resolver.No basta simplemente con afirmar using System.Drawing, el ensamblado que define ese espacio de nombres y sus tipos también debe pasarse al compilador.

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

Actualizar
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 sistema. El espacio de nombres no se admite para su uso dentro de un servicio Windows o ASP.NET.Intentar usar estas clases desde uno de estos tipos de aplicaciones puede producir problemas inesperados, como el rendimiento del servicio disminuido y las excepciones de tiempo de ejecución.Para una alternativa compatible, consulte los componentes de imágenes de Windows.

Yo diría que esto califica como un problema inesperado, aunque no esperaría que se manifiesten problemas 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top