سؤال

باستخدام.نت 2.0.

System.Drawing موجود في قائمة المراجع الخاصة بي.

هنا أنا using إفادة:

using System.Drawing;

هنا هو الرمز:

private static Rectangle rScreen;

وهنا الخطأ في هذا السطر:

نص الخطأ:النوع أو اسم مساحة الاسم "مستطيل" غير موجود في مساحة الاسم "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 الأخرى تعمل وتعمل لفترة طويلة.هذه هي المرة الأولى التي أواجه فيها مثل هذا الخطأ.

لقد تأكدت وتأكدت جيدًا من إضافة المرجع.إذا حاولت إضافته إلى المشروع مرة أخرى، أحصل على رسالة مفادها أن المرجع موجود بالفعل.

شكرًا

هل كانت مفيدة؟

المحلول

لقد ذكرت في التعليقات والعلامات أن هذا يتم تجميعه ديناميكيًا بواسطة تطبيق آخر.ولذلك فمن المحتمل أن هذا التطبيق الآخر لا يشمل System.Drawing.dll كمرجع عند إجراء التحويل البرمجي وبالتالي لم يتم حل النوع.ولا يكفي مجرد القول using System.Drawing, ، يجب أيضًا تمرير التجميع الذي يحدد مساحة الاسم وأنواعه إلى المترجم.

في الكود، يتم ذلك باستخدام ملف CompilerParameters تم تمرير المثيل عبر أحد CompileAssemblyFrom... يدعو إلى CodeDomProvider المثيل الذي يقوم بتنفيذ التجميع (في هذه الحالة، ملف CSharpCodeProvider).ال CompilerParameters.ReferencedAssemblies تشير المجموعة للمترجم إلى التجميعات التي يجب النظر إليها عند محاولة إجراء تحليل الكتابة.

تحديث
حاول إضافة صراحة mscorlib إلى المراجع.

أيضًا، لا أعرف ما إذا كان هذا مرتبطًا، ولكن كما ذكرت الخادم (هل هي خدمة من نوع ما؟) تنص MSDN:

لا يتم دعم الفئات داخل مساحة الاسم System.drawing للاستخدام داخل خدمة Windows أو ASP.NET.قد تؤدي محاولة استخدام هذه الفئات من داخل إحدى أنواع التطبيقات إلى مشاكل غير متوقعة ، مثل تناقص أداء الخدمة واستثناءات وقت التشغيل.للحصول على بديل مدعوم ، راجع مكونات تصوير Windows.

أود أن أقول أن هذا يعتبر مشكلة غير متوقعة على الرغم من أنني لا أتوقع ظهور المشكلات أثناء عملية الترجمة، بل عند تنفيذ التعليمات البرمجية.ومع ذلك، فإنهم لا يحددون ذلك حقًا في الوثائق، لذلك يمكن أن ينطبق على استخدام System.Drawing.dll كمرجع بشكل عام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top