Winforms ';矩形';命名空间中不存在';系统图';

Winforms ';矩形';命名空间中不存在';系统图';,winforms,.net-2.0,dynamic-compilation,Winforms,.net 2.0,Dynamic Compilation,使用.NET2.0 System.Drawing在我的参考列表中 以下是我的使用语句: using System.Drawing; 代码如下: private static Rectangle rScreen; 以下是这一行的错误: 错误文本:命名空间“System.Drawing”中不存在类型或命名空间名称“Rectangle”(是否缺少程序集引用?) 为什么? 编辑:添加了编译代码: Dictionary<string, string> dict = new Dictiona

使用.NET2.0

System.Drawing
在我的参考列表中

以下是我的
使用
语句:

using System.Drawing;
代码如下:

private static Rectangle rScreen;
以下是这一行的错误:

错误文本:命名空间“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);
}
Dictionary dict=new Dictionary();
dict.Add(“compilervision”、“v3.5”);
CSharpCodeProvider codeProvider=新的CSharpCodeProvider(dict);
CompilerParameters参数=新的CompilerParameters();
{
parameters.referencedAssembly.Add(“System.Drawing.dll”);
parameters.referencedAssembly.Add(“System.dll”);
parameters.referencedAssembly.Add(“System.Core.dll”);
parameters.referencedAssembly.Add(“System.Data.dll”);
parameters.referencedAssemblys.Add(“System.Data.Linq.dll”);
parameters.referencedAssembly.Add(“System.DirectoryServices.dll”);
parameters.referencedAssembly.Add(“System.Configuration.dll”);
parameters.referencedAssembly.Add(“System.Web.dll”);
parameters.referencedAssembly.Add(“System.Xml.dll”);
parameters.referencedAssembly.Add(“System.Windows.Forms.dll”);
parameters.referencedAssembly.Add(“System.Web.Services.dll”);
parameters.referencedAssembly.Add(“System.ServiceModel.dll”);
parameters.referencedAssembly.Add(“System.IdentityModel.dll”);
parameters.ReferencedAssemblys.Add(string.Format(@“{0}{1}Microsoft.ReportViewer.Common.dll”、AppDomain.CurrentDomain.RelativeSearchPath、@“\ReportViewer\”);
parameters.ReferencedAssemblys.Add(string.Format(@“{0}{1}Microsoft.ReportViewer.WebForms.dll”、AppDomain.CurrentDomain.RelativeSearchPath、@“\ReportViewer\”);
}
CompilerResults results=codeProvider.CompileAsemblyFromSource(参数,sources.ToArray());
尝试
{
添加(hashKey,newdynamicassemby(results.CompiledAssembly));
返回ApexAssemblyManager.dynamicAssemblies[hashKey].CreateInstance(typeName);
}
所有其他引用程序集都可以工作,并且已经工作了很长时间。这是我第一次犯这样的错误

我已确保并再次检查是否添加了参考。如果我再次尝试将其添加到项目中,我会收到一条消息,说明该引用已经存在


谢谢

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

在代码中,这是使用一个实例来完成的,该实例通过对执行编译的实例(在本例中为。集合向编译器指示在尝试执行类型解析时要查看的程序集

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

另外,我不知道这是否相关,但正如您提到的服务器(它是某种服务吗?):

系统中的类。绘图 不支持使用命名空间 在Windows或ASP.NET服务中。 正在尝试从中使用这些类 在其中一种应用程序类型中 可能会产生意想不到的问题,例如 由于服务表现下降和 运行时异常。支持 或者,请参见Windows图像处理 组成部分


我认为这是一个意外的问题,尽管我不希望在编译过程中出现问题,而是在执行代码时出现问题。也就是说,他们并没有在文档中真正指定它,因此它可以应用于使用
System.Drawing.dll
作为一般参考。

这是Visual Studio的吗?在编辑器中,单词
矩形
的右下角是否有一个小红方块,并带有建议的更正?你能改为键入
System.Drawing.Rectangle
吗?它在Visual Studio中编译得很好。这是在另一个包含using语句的应用程序中动态编译运行的。a)尝试使用类型的整个范围,b)您的声明是否在
using
语句的范围内?c) 请编辑问题并解释动态编译的内容。请发布编译代码。这就是这种情况下的错误代码。另外,您的开发机器上是否安装了.NET4?您确定它引用的是被引用程序集的正确版本吗?是的,我有:parameters.ReferencedAssembly.Add(“System.Drawing.dll”);我甚至尝试更改相对于其他ReferencedAssembly的顺序。是的,想法都快用完了。@user390480:但它找不到。您确定类型解析正确定位了它吗?您知道在查找程序集时它正在搜索哪些路径吗?发布编译代码-可能有错误。在我的本地计算机上,System.Drawing.dll的版本是2.0.50727.5420,而在服务器上,版本是2.0.50727.3053。这会有什么不同吗?@user390480:什么有效?是
mscorlib
还是“意外问题”呢?我很好奇。