سؤال

لقد قمت بإنشاء مكتبة فئة محمولة تسمى DataContracts الذي يحتوي على مشاريعي Messages و Views.الاشياء القياسية مثل GetStockItemByIDRequest و StockView الواردة فيه.

المشكلة تكمن عندما أحاول الإضافة DataAnnotations باستخدام System.ComponentModel.DataAnnotations لبعض من بلدي Views كما.

[DataContract]
public class StockView
{
    [Required]
    [DataMember]
    public Guid StockID { get; set; }

    [Required]
    [DataMember]
    public string Name { get; set; }
}

يمكنني إضافة بنجاح System.ComponentModel.DataAnnotations إلى مشروع Portable Class Library الخاص بي ويمكنني الرجوع إليه بنجاح في تطبيق Windows Phone 8 الخاص بي ويمكنني أيضًا إنشاء مثيل جديد لطريقة العرض الخاصة بي على هذا النحو StockView View = new StockView(); داخل تطبيق Windows Phone الخاص بي ولكن إذا حاولت استخدام أي منهما Newtonsoft.Json أو System.Net.Http.HttpClient عن طريق القيام بشيء مثل

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://myservice.com");
T result = await response.Content.ReadAsAsync<T>();

أو

T result = await Newtonsoft.Json.JsonConvert.DeserializeObjectAsync<T>("{}");

أي:حيث يتعلق الأمر بإلغاء التسلسل ...

أنا أواجه الخطأ Could not load file or assembly 'System.ComponentModel.DataAnnotations, Version=2.0.5.0'.والذي أفترضه هو أنه لا يبدو ذلك System.ComponentModel.DataAnnotations ويدعم في نظام التشغيل Windows Phone 8 (ولكن لماذا يمكنني إضافته كمرجع إلى PCL الخاص بي؟).

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

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

المحلول 2

حسنًا، اتضح أن افتراضاتي الأصلية كانت خاطئة تمامًا.يمكنك بالتأكيد الرجوع إلى System.ComponentModel.DataAnnotations مساحة الاسم من مشروع Windows Phone 8.

يتعلق الأمر بشكل أساسي بالرجوع إلى إصدار Silverlight من ملف dll الذي يمكن العثور عليه بشكل مضاد C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System.ComponentModel.DataAnnotations.dll

لمزيد من المعلومات حول كيفية إنشاء مكتبات فئة محمولة أقترح في اشارة الى هذه المادة .

نصائح أخرى

لسوء الحظ، DataAnnotations غير محمولة حاليًا.على الرغم من أن الأمر معقد بعض الشيء، إلا أنه يمكنك على الأرجح التغلب على ذلك عن طريق كتابة سمات DataAnnotation الخاصة بك في PCL، وإنشاء تجميع يحمل نفس الاسم لمشاريع .NET Framework التي تعيد توجيه السمات إلى الإصدارات "الحقيقية".يرى هذه الإجابة لمزيد من التفاصيل حول هذا.

يتم دعم التعليقات التوضيحية للبيانات في بعض ملفات تعريف PCL.

الملفات الشخصية المدعومة:

  • صافي 4.0.3 وما فوق
  • متجر ويندوز 8 وما فوق
  • سيلفرلايت 4 وما فوق

والجدير بالذكر أن أحدث إصدار من Windows Phone غير مدعوم (8.1 في ذلك الوقت).

راجع جدول ميزات PCL الكامل في:http://msdn.microsoft.com/en-us/library/gg597391%28v=vs.110%29.aspx

1) لا تتضمن عملية إنشاء مثيل فئة جديد قراءة السمات المخصصة التي يتم تحميلها عن طريق الانعكاس.

2) ال System.ComponentModel.DataAnnotations حصريًا لـ ASP.NET

توفر مساحة اسم System.componentModel.Dataannotations فئات السمات المستخدمة لتحديد البيانات الوصفية لعناصر التحكم في بيانات ASP.NET MVC و ASP.NET.

النسخة المحمولة من System.ComponentModel.DataAnnotations تبدو غير مكتملة (على سبيل المثال لا يوجد MaxLengthAttribute).

توجد هذه المكتبة:

https://github.com/ryanhorath/PortableDataAnnotations:

Install-Package Portable.DataAnnotations

يحتاج PCL الخاص بك إلى استهداف Silverlight 8، وإلا فسوف تحصل على أخطاء متعددة في تعريف الفئة.

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