Как мне обращаться с CLS-совместимым в веб-справочнике? - PullRequest
0 голосов
/ 17 июля 2009

Я включаю [Assembly: System.CLSCompliant (true)] внутри сборок моего решения C #.

Теперь я получаю несколько предупреждений внутри сгенерированного кода для веб-службы 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]));
    }

Как я могу удалить это предупреждение?

Спасибо, Кит

Ответы [ 2 ]

1 голос
/ 17 июля 2009

Вы можете пометить несовместимые методы с помощью атрибута [CLSCompliant(false)], чтобы избежать предупреждений, но это, кажется, лишает возможности пометить ваши сборки как совместимые в первую очередь: предположительно, вы хотите, чтобы код действительно был CLS совместимый.

Чтобы код соответствовал, вам нужно изменить тип возвращаемого значения метода: uint / UInt32. Открытые неподписанные типы не соответствуют CLS.

Вместо этого вы можете вернуть long / Int64. Тип long соответствует CLS и будет безопасно обрабатывать любое возможное значение uint.

Если вы не можете или не хотите редактировать сгенерированный код (чтобы добавить атрибут или изменить тип возвращаемого значения), тогда я думаю, что ваш единственный вариант - переместить этот код в отдельную несовместимую сборку как предлагает Джон .

0 голосов
/ 17 июля 2009

Я бы порекомендовал вам разместить веб-ссылки в отдельном проекте библиотеки классов, который не настроен на CLS-совместимость. Ссылка на эту библиотеку из вашего основного кода.

...