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

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top