2012-01-04 14 views
8

Tengo errores cuando construyo mi proyecto:¿Por qué mi código no cumple con CLS?

Warning as Error: Type of 'OthersAddresses.AddresseTypeParameter' is not CLS-compliant C:...\Units\OthersAddresses.ascx.cs

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

y éste:

Warning as Error: Type of 'Global.UserInSession' is not CLS-compliant 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; 
    } 
} 

que añade atributo [CLSCompliant(false)] antes UserInSession y AddresseTypeParameter y funciona pero me gustaría entender por qué no fue CLS-co mpliant.

Algunos más información sobre las clases y enumeración:

clase de usuario (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 
     } 

Y

enumeración 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 
    } 
+6

Probablemente tengas que mostrar la definición de las clases 'User' y' Address' para ayudarte aún más. –

+3

Deletreó la dirección incorrecta por cierto. – Ray

+0

¿Hizo los tipos de propiedad CLS-obedientes? – Kolky

Respuesta

8

Es necesario utilizar el CLSCompliantAttribute:

If no CLSCompliantAttribute is applied to a program element, then by default:

  • The assembly is not CLS-compliant.
  • The type is CLS-compliant only if its enclosing type or assembly is CLS-compliant.
  • The member of a type is CLS-compliant only if the type is CLS-compliant.

Aparte de ello, tiene que asegurarse de que su montaje es de hecho CLS compliant.

+2

Para realizar el seguimiento, obtendrá este tipo de advertencias: "X" no cumple con CLS, si está utilizando un tipo de un ensamblaje que no está marcado como CLSCompliant de uno que sí lo es. Agregar el atributo como se indica al archivo AssemblyInfo.cs del proyecto 'fuente' generalmente resolverá esto. –

1

Esto le permite saber que "Tipo de 'OthersAdresses.AdresseTypeParameter' no cumple con CLS", no que las propiedades sean necesariamente. Observe los tipos, no las propiedades, y probablemente encontrará el motivo de la advertencia.

Cuestiones relacionadas