Почему мой код не совместим с CLS? - PullRequest
10 голосов
/ 04 января 2012

У меня есть ошибки при сборке проекта:

Предупреждение как ошибка: тип «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
        }

И

enum 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
    }

Ответы [ 2 ]

8 голосов
/ 04 января 2012

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

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

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

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

1 голос
/ 04 января 2012

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

...