为什么我的代码不符合 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;
}
}
我在 UserInSession
之前添加了属性 [CLSCompliant(false)]
code> 和 AddresseTypeParameter
它可以工作,但我想了解为什么它不符合 CLS。
有关类和枚举的更多信息:
类 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
}
和
枚举 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
}
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
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用
CLSCompliantAttribute
:除此之外,您需要确保您的程序集确实CLS 兼容。
You need to use the
CLSCompliantAttribute
:Apart from this you need to ensure your assembly is indeed CLS compliant.
这让您知道“
OthersAdresses.AdresseTypeParameter
的类型不符合 CLS”,但属性不一定符合 CLS。查看类型,而不是属性,您可能会找到导致警告的原因。This is letting you know that "Type of
OthersAdresses.AdresseTypeParameter
is not CLS-compliant", not that the properties necessarily are. Take a look at the types, not the properties, and you will probably find what is causing the warning.