كيف يمكنني التعامل مع CLS متوافقة ضمن مرجع ويب؟
-
16-09-2019 - |
سؤال
أنا أتحول [الجمعية: system.clscompliant (صحيح)] داخل جمعيات حل C #.
أحصل الآن على بعض التحذيرات داخل التعليمات البرمجية التي تم إنشاؤها لخدمة الويب SharePoint.
فيما يلي أحد الأساليب التي لا توافق CLS:
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://schemas.microsoft.com/sharepoint/soap/GetItem", RequestNamespace="http://schemas.microsoft.com/sharepoint/soap/", ResponseNamespace="http://schemas.microsoft.com/sharepoint/soap/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public uint GetItem(string Url, out FieldInformation[] Fields, [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] out byte[] Stream) {
object[] results = this.Invoke("GetItem", new object[] {
Url});
Fields = ((FieldInformation[])(results[1]));
Stream = ((byte[])(results[2]));
return ((uint)(results[0]));
}
كيف يمكنني إزالة هذا التحذير؟
شكرا لك، كيث
المحلول
أود أن أوصي بوضع مراجع الويب الخاصة بك في مشروع مكتبة فئة منفصلة لم يتم ضبطها على CLS. مرجع تلك المكتبة من الرمز الرئيسي الخاص بك.
نصائح أخرى
يمكنك تحديد الأساليب غير المتوافقة مع [CLSCompliant(false)]
سمة لتجنب التحذيرات، ولكن يبدو أن هذا هو هزيمة كائن بمناسبة التجميعات الخاصة بك كامتثال في المقام الأول: من المفترض أن تكون الرموز متوافقة بالفعل CLS.
لجعل الرمز يتوافق، تحتاج إلى تغيير نوع المرتجع للطريقة من uint
/UInt32
. وبعد أنواع مكشوفة غير موقعة ليست متوافقة CLS.
يمكنك العودة long
/Int64
في حين أن. ال long
النوع هو cls متوافق معه وسوف يتعامل بأمان مع أي ممكن uint
القيمة.
إذا لم تتمكن، أو لا تقوم، قم بتحرير التعليمات البرمجية التي تم إنشاؤها (إما إضافة السمة أو تغيير نوع الإرجاع)، فما أعتقد أن خيارك الوحيد هو نقل هذا الرمز إلى مجموعة منفصلة غير متوافقة كما يوحنا جون.