Como posso lidar com compatíveis com CLS dentro de uma referência Web?
-
16-09-2019 - |
Pergunta
Estou ligando [assembly: System.CLSCompliant (true)]. Dentro das assembleias de minha solução C #
Agora estou recebendo alguns avisos dentro do código gerado para um serviço Web SharePoint.
Aqui é um dos métodos que não são compatíveis com 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]));
}
Como posso remover esse aviso?
Obrigado, Keith
Solução
Eu recomendo que você coloque suas referências na web em um projeto de biblioteca de classe separada que não está definido para ser compatível com CLS. Referência que a biblioteca do seu código principal.
Outras dicas
Você pode marcar os métodos não conformes com o atributo [CLSCompliant(false)]
para evitar os avisos, mas que parece derrotar o objeto de marcar seus conjuntos como compatível em primeiro lugar: Provavelmente, você quer o código para realmente ser compatível com CLS.
Para tornar o código cumprir, você precisa mudar o tipo de retorno do método de uint
/ UInt32
. tipos não assinados expostas não são compatíveis com CLS.
Você poderia voltar long
/ Int64
. O tipo long
é compatível com CLS e irá lidar com segurança qualquer valor uint
possível.
Se você não pode, ou não, editar o código gerado (para adicionar o atributo ou alterar o tipo de retorno), então eu acho que sua única opção é mover esse código para um conjunto separado, não-conformes < a href = "https://stackoverflow.com/questions/1140716/how-do-i-handle-cls-compliant-within-a-web-reference/1140773#1140773"> como John sugere .