2011-05-16 15 views
5

.NET 2.0 का उपयोग कर मौजूद नहीं है।'आयताकार' नामस्थान 'सिस्टम' ड्रॉइंग '

System.Drawing मेरी संदर्भ सूची में है।

यहाँ मेरी using कथन है:

त्रुटि पाठ:: प्रकार या नाम स्थान

private static Rectangle rScreen; 

यहाँ इस लाइन पर त्रुटि है:

using System.Drawing; 

यहाँ कोड है नाम 'आयताकार' नामस्थान 'सिस्टम' ड्रॉइंग 'में मौजूद नहीं है (क्या आप एक असेंबली संदर्भ खो रहे हैं?)

क्यों?

संपादित करें: जोड़ा संकलन कोड:

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); 
} 

अन्य सभी ReferencedAssemblies काम करते हैं और एक लंबे समय के लिए काम कर रहा है। यह पहली बार है जब मुझे ऐसी कोई त्रुटि हुई है।

मैंने सुनिश्चित किया है और संदर्भ दोहराया है कि संदर्भ जोड़ा गया है। अगर मैं इसे परियोजना में जोड़ने की कोशिश करता हूं तो मुझे एक संदेश मिलता है कि संदर्भ पहले से मौजूद है।

धन्यवाद

टिप्पणी और टैग है कि इस गतिशील रूप से किसी अन्य अनुप्रयोग द्वारा संकलित किया जा रहा है में
+0

क्या यह विजुअल स्टूडियो के साथ है? क्या आपको सुझाए गए सुधार के साथ संपादक में 'आयताकार' शब्द के निचले दाएं भाग पर थोड़ा लाल वर्ग मिलता है? क्या आप इसके बजाए 'System.Drawing.Rectangle' टाइप कर सकते हैं और यह काम करेगा? – ja72

+0

यह विजुअल स्टूडियो में ठीक संकलित करता है। यह किसी अन्य एप्लिकेशन में गतिशील रूप से संकलित के रूप में चल रहा है जिसमें इसका उपयोग कथन है। – user390480

+0

ए) प्रकार के पूर्ण दायरे से प्रयास करें और बी) क्या आप 'उपयोग' कथन के दायरे में घोषणा कर रहे हैं? सी) डायनामिक रूप से संकलित किए गए विवरण के स्पष्टीकरण के साथ प्रश्न संपादित करें। – ja72

उत्तर

5

आप राज्य। इसलिए यह संभव है कि संकलन निष्पादित करते समय इस अन्य अनुप्रयोग में संदर्भ के रूप में System.Drawing.dll शामिल नहीं है और इसलिए, प्रकार अनसुलझा है। यह केवल using System.Drawing राज्य के लिए पर्याप्त नहीं है, असेंबली परिभाषित करता है कि नामस्थान और इसके प्रकार भी कंपाइलर को पास किए जाने चाहिए।

कोड में, यह एक CompilerParameters उदाहरण है कि संकलन प्रदर्शन कर रहा है CodeDomProvider उदाहरण के लिए CompileAssemblyFrom... कॉल में से एक (इस मामले में, CSharpCodeProvider) के माध्यम से पारित कर दिया उपयोग किया जाता है। CompilerParameters.ReferencedAssemblies संग्रह संकलक को इंगित करता है कि किस प्रकार के असेंबली प्रकार को संकल्प करने की कोशिश करते समय देखना है।

अद्यतन
स्पष्ट संदर्भ mscorlib जोड़ने का प्रयास करें।

इसके अलावा, मैं नहीं जानता कि अगर यह संबंधित है, लेकिन जैसा कि आप एक सर्वर (यह किसी तरह की एक सेवा है?), MSDN states उल्लेख किया: System.Drawing नाम स्थान के अंदर

वर्ग हैं Windows या ASP.NET सेवा के भीतर उपयोग के लिए समर्थित नहीं है। से इन कक्षाओं में से किसी एक के भीतर इन कक्षाओं का उपयोग करने का प्रयास अप्रत्याशित समस्याओं का उत्पादन कर सकता है, जैसे कम सेवा प्रदर्शन और रन-टाइम अपवादों के रूप में। समर्थित विकल्प के लिए, Windows इमेजिंग घटक देखें।

मैं कहूंगा कि यह एक अप्रत्याशित समस्या के रूप में योग्यता प्राप्त करता है हालांकि मैं संकलन प्रक्रिया के दौरान समस्याओं को प्रकट करने की अपेक्षा नहीं करता, बल्कि कोड निष्पादित करते समय। उन्होंने कहा, वे वास्तव में दस्तावेज में निर्दिष्ट नहीं करते हैं, इसलिए यह सामान्य रूप से संदर्भ के रूप में System.Drawing.dll के उपयोग पर लागू हो सकता है।

+0

हां, मेरे पास यह है: पैरामीटर। संदर्भित Assemblies.Add ("System.Drawing.dll"); मैंने अन्य संदर्भित एस्सेम्ब्ली के सापेक्ष ऑर्डर बदलने की भी कोशिश की। हाँ, विचारों से बाहर चल रहा है। – user390480

+0

@ user390480: लेकिन यह इसे नहीं ढूंढ रहा है। क्या आप सुनिश्चित हैं कि प्रकार का संकल्प ठीक से ढूंढ रहा है? क्या आप जानते हैं कि असेंबली की तलाश करते समय यह कौन सी पथ खोज रहा है? अपना संकलन कोड पोस्ट करें - शायद वहां एक त्रुटि है। –

+0

पोस्ट करने के लिए संकलन कोड जोड़ा गया। – user390480

संबंधित मुद्दे