Come si gestiscono CLS-compliant all'interno di un riferimento Web?
-
16-09-2019 - |
Domanda
Mi rivolgo a [assembly: System.CLSCompliant (true)] all'interno delle assemblee di mia soluzione C #
.Ora sto ottenendo alcuni avvisi all'interno del codice generato per un servizio Web di SharePoint.
Qui è uno dei metodi che non sono compatibile con 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]));
}
Come posso rimuovere questo avvertimento?
Grazie, Keith
Soluzione
Mi consiglia di posizionare i riferimenti web in un progetto libreria di classi separato che non è impostato per essere compatibile con CLS. Riferimento quella libreria dal codice principale.
Altri suggerimenti
È possibile contrassegnare i metodi non conformi con l'attributo [CLSCompliant(false)]
per evitare gli avvertimenti, ma che sembra per sconfiggere l'oggetto della marcatura vostre assemblee come conforme, in primo luogo: Presumibilmente si desidera che il codice sia effettivamente compatibile con CLS.
Per rendere il codice rispetti, è necessario cambiare il tipo di ritorno del metodo da uint
/ UInt32
. tipi senza segno a vista non sono compatibile con CLS.
Si potrebbe tornare long
/ Int64
. Il tipo long
è compatibile con CLS e in modo sicuro gestire qualsiasi valore uint
possibile.
Se non si può, o non vuole, modificare il codice generato (per aggiungere l'attributo o modificare il tipo di ritorno) quindi penso che l'unica opzione è quella di spostare il codice per un assembly separato, non conforme < a href = "https://stackoverflow.com/questions/1140716/how-do-i-handle-cls-compliant-within-a-web-reference/1140773#1140773"> come John suggerisce .