Как мне работать с CLS-совместимостью в веб-ссылке?

StackOverflow https://stackoverflow.com/questions/1140716

  •  16-09-2019
  •  | 
  •  

Вопрос

Я включаю [сборку: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]));
    }

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

Спасибо тебе, Кит

Это было полезно?

Решение

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

Другие советы

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

Чтобы привести код в соответствие, вам необходимо изменить возвращаемый тип метода с uint/UInt32.Открытые неподписанные типы не соответствуют CLS.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top