'System.Drawing'命名空间中不存在'Rectangle'

use*_*480 6 dynamic-compilation .net-2.0 winforms

使用.NET 2.0.

System.Drawing 在我的参考文献列表中.

这是我的using发言:

using System.Drawing;
Run Code Online (Sandbox Code Playgroud)

这是代码:

private static Rectangle rScreen;
Run Code Online (Sandbox Code Playgroud)

这是这一行的错误:

错误文本:命名空间"System.Drawing"中不存在类型或命名空间名称"Rectangle"(您是否缺少程序集引用?)

为什么?

编辑:添加编译代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

所有其他ReferencedAssemblies工作并且已经工作了很长时间.这是我第一次遇到这样的错误.

我确保并仔细检查添加了引用.如果我再次尝试将其添加到项目中,我会收到一条消息,表明该引用已存在.

谢谢

Jef*_*tes 5

您在注释和标记中声明这是由另一个应用程序动态编译的.因此,System.Drawing.dll在执行编译时,此其他应用程序可能不包括作为参考,因此,类型未解析.仅仅陈述是不够的using System.Drawing,定义该命名空间的程序集及其类型也必须传递给编译器.

在代码中,这是CompilerParameters通过对执行编译CompileAssemblyFrom...CodeDomProvider实例(在本例中为CSharpCodeProvider)的一个调用传递的实例来完成的.该CompilerParameters.ReferencedAssemblies集合向编译器指示在尝试执行类型解析时要查看的程序集.

更新
尝试显式添加mscorlib到引用.

此外,我不知道这是否相关,但正如你提到的服务器(它是某种服务?),MSDN声明:

System.Drawing命名空间中的类不支持在Windows或ASP.NET服务中使用.尝试在其中一种应用程序类型中使用这些类可能会产生意外问题,例如服务性能下降和运行时异常.有关支持的替代方法,请参阅Windows Imaging Components.

我说这可以作为一个意想不到的问题,虽然我不希望在编译过程中出现问题,而是在执行代码时.也就是说,他们并没有在文档中明确指出,所以它可以适用System.Drawing.dll于一般的参考.