¿Cómo manejo compatible con CLS dentro de una referencia Web?
-
16-09-2019 - |
Pregunta
Estoy encender [assembly: System.CLSCompliant (true)] en el interior de los conjuntos de mi C # solución
.ahora estoy recibiendo algunas advertencias en el código generado para un Servicio Web de SharePoint.
Aquí es uno de los métodos que no son compatibles 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]));
}
¿Cómo puedo eliminar esta advertencia?
Gracias, Keith
Solución
Me gustaría recomendar colocar sus referencias web en un proyecto de biblioteca de clases separado que no está dispuesto a ser compatible con CLS. Hacer referencia a la biblioteca a partir del código principal.
Otros consejos
Puede marcar los métodos no conformes con el atributo [CLSCompliant(false)]
para evitar las advertencias, pero que parece que menoscabe el objeto de marcar sus asambleas como compatible en el primer lugar: Es de suponer que desea que el código sea realmente compatible con CLS.
Para hacer cumplir el código, es necesario cambiar el tipo de retorno del método de uint
/ UInt32
. los tipos sin signo expuestas no son compatible con CLS.
Se podía volver long
/ Int64
lugar. El tipo long
es compatible con CLS y manejará de forma segura cualquier valor uint
posible.
Si no puede, o no quiere, edite el código generado (ya sea a añadir el atributo o alterar el tipo de retorno) entonces creo que su única opción es mover ese código para un montaje por separado, no conforme < a href = "https://stackoverflow.com/questions/1140716/how-do-i-handle-cls-compliant-within-a-web-reference/1140773#1140773"> como John sugiere .