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工作并且已经工作了很长时间.这是我第一次遇到这样的错误.
我确保并仔细检查添加了引用.如果我再次尝试将其添加到项目中,我会收到一条消息,表明该引用已存在.
谢谢
您在注释和标记中声明这是由另一个应用程序动态编译的.因此,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于一般的参考.
| 归档时间: |
|
| 查看次数: |
3654 次 |
| 最近记录: |