문제

C# 솔루션의 어셈블리 내부에서 [Assembly : System.clsCompliant (True)]를 켜고 있습니다.

이제 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 값.

생성 된 코드를 편집 할 수 없거나 그렇지 않은 경우 (속성을 추가하거나 반환 유형을 변경하려면) 유일한 옵션은 해당 코드를 별도의 비준수 어셈블리로 이동시키는 것입니다. 요한이 제안한대로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top