0

我在我的 C# 解决方案的程序集中打开 [assembly: System.CLSCompliant(true)]。

我现在在为 SharePoint Web 服务生成的代码中收到了一些警告。

这是不符合 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]));
    }

如何删除此警告?

谢谢你,基思

4

2 回答 2

1

您可以使用属性标记不合规的方法[CLSCompliant(false)]以避免警告,但这似乎首先破坏了将程序集标记为合规的对象:大概您希望代码实际上是符合 CLS 的。

为了使代码符合要求,您需要从uint/更改方法的返回类型UInt32。公开的无符号类型不符合 CLS。

你可以返回long/Int64代替。该long类型符合 CLS,并且可以安全地处理任何可能的uint值。

如果您不能或不会编辑生成的代码(以添加属性或更改返回类型),那么我认为您唯一的选择是将该代码移至John 建议的单独的不兼容程序集。

于 2009-07-16T22:50:02.160 回答
0

我建议您将 Web 引用放在未设置为符合 CLS 的单独类库项目中。从您的主代码中引用该库。

于 2009-07-16T23:08:43.587 回答