I've got errors when I build my project:
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;
}
}
and this one:
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;
}
}
I added attribute [CLSCompliant(false)]
before UserInSession
and AddresseTypeParameter
and it works but I would like to understand why it was not CLS-compliant.
Some more information about classes and enum:
Class User (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
}
And
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
}
You need to use the 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.
Apart from this you need to ensure your assembly is indeed CLS compliant.