Почему мой код несовместим с CLS?

При создании проекта возникают ошибки:

Предупреждение как ошибка: тип OthersAddresses.AddresseTypeParameter не соответствует требованиям CLS C: ... \ Units \ OthersAddresses.ascx.cs

public Address.AddressTypeEnum AddressTypeParameter
    {
        get 
        {
            return _addressTypeParameter;
        }
        set 
        {
            _addressTypeParameter = value;
        }
    }

и этот:

Предупреждение как ошибка: тип Global.UserInSession несовместим с CLS C: ... \ Global.asax.cs

public static User UserInSession
{
    get
    {
        return (HttpContext.Current.Session["CurrentUser"] == null) 
            ? null 
            : HttpContext.Current.Session["CurrentUser"] as User;
    }
    set
    {
        HttpContext.Current.Session["CurrentUser"] = value;
    }
}

Я добавил атрибут [CLSCompliant(false)] перед UserInSession и AddresseTypeParameter, и он работает, но я хотел бы понять, почему он не соответствует требованиям CLS.

Еще немного информации о классах и перечислении:

Пользователь класса (User.cs)

public class User
    {
        private string _uniqueIdentifier;
        private string _password = string.Empty;
        private string _email = string.Empty;
        private string _passwordQuestion = string.Empty;
        private string _passwordAnswer = string.Empty;
        private string _id_directions_db = string.Empty;
        private string _id_gesab = string.Empty;
        private string _zipCode = string.Empty;
        private string _fonction_id = string.Empty;
        private string _fonction = string.Empty;
        private string _structure_id = string.Empty;
        private string _structure = string.Empty;
        private string _firstName = string.Empty;
        private string _lastName = string.Empty;
        private string _company = string.Empty;
        private string _avatarPath = string.Empty;
        private Role _role = new Role();
        private List<Address> _addressList = new List<Address>();
        private string _otherInformation = string.Empty;
        private MembershipUser _membershipUserAssociated = null;
        ...

        public enum GenderEnum
        {
            Empty = 0,
            Monsieur,
            Madame
        }

И

перечисление AddressTypeEnum (Address.cs)

public class Address
{
    private AddressTypeEnum _addressType;
    private string _firstName = string.Empty;
    private string _lastName =string.Empty;
    private string _structure = string.Empty;
    private string _structureComplementary = string.Empty;
    private string _addressStreet = string.Empty;
    private string _addressComplementary = string.Empty;
    private string _bp = string.Empty;
    private string _zipCode = string.Empty;
    private string _country = string.Empty;
    private string _countryId = string.Empty;
    private string _city = string.Empty;
    private string _phone = string.Empty;
    private string _fax = string.Empty;
    private string _email = string.Empty;

    public enum AddressTypeEnum
    {
        Empty = 0,
        Personal = 1,
        Billing = 2,
        Delivery = 3
    }

person Evilduky    schedule 04.01.2012    source источник
comment
Возможно, вам придется показать определение классов User и Address, чтобы помочь вам в дальнейшем.   -  person Uwe Keim    schedule 04.01.2012
comment
Кстати, вы неправильно написали адрес.   -  person Ray    schedule 04.01.2012
comment
Вы сделали типы собственности CLS-совместимыми?   -  person Kolky    schedule 04.01.2012
comment
Вы действительно хотите знать, почему ваш код несовместим с CLS, или вы просто хотите знать, как избавиться от этих предупреждений как ошибок? Другими словами, уверены ли вы, что ваш код должен быть, должен быть, обязательно должен быть CLS-совместимым?   -  person Mike Nakis    schedule 04.01.2012
comment
Вы отметили сборку как совместимую с CLS? msdn.microsoft.com/en-us/library/   -  person Oded    schedule 04.01.2012
comment
Прочтите руководство по написанию кода, совместимого с CLS; многое из этого объясняет вашу ошибку: msdn.microsoft.com/en -us / library / bhc3fa7f.aspx   -  person Kolky    schedule 04.01.2012
comment
Вы случайно не используете типы в User и Address, которые не совместимы с CLS? msdn.microsoft.com/en-us/library /12abdwbc(v=vs.80).aspx   -  person TheBoyan    schedule 04.01.2012
comment
Не уверен, что вложенные типы совместимы с CLS.   -  person CodesInChaos    schedule 04.01.2012


Ответы (2)


Вам необходимо использовать CLSCompliantAttribute:

Если к элементу программы не применяется CLSCompliantAttribute, то по умолчанию:

  • Сборка несовместима с CLS.
  • Тип является CLS-совместимым, только если его включающий тип или сборка CLS-совместимы.
  • Член типа является CLS-совместимым, только если тип является CLS-совместимым.

Помимо этого, вам необходимо убедиться, что ваша сборка действительно совместима с CLS.

person Oded    schedule 04.01.2012
comment
В дальнейшем вы получите такие предупреждения - «X» не соответствует требованиям CLS - если вы используете тип из сборки, которая не помечена как CLSC-совместимая с той, которая есть. Добавление атрибута, как указано в файле AssemblyInfo.cs «исходного» проекта, обычно решает эту проблему. - person Christopher King; 25.07.2014

Это дает вам знать, что «Тип 'OthersAdresses.AdresseTypeParameter' не является CLS-совместимым», а не то, что свойства обязательно таковыми. Взгляните на типы, а не на свойства, и вы, вероятно, обнаружите, что вызывает предупреждение.

person Mark Avenius    schedule 04.01.2012