Я столкнулся с самой любопытной проблемой, когда-либо существовавшей .Net dev. Я собираю библиотеку, которая имеет недавно добавленное свойство DeviceID в классе UserInfo . Библиотека внутренне использует тип, и это новое свойство просто отлично, но когда я пытаюсь сослаться на него из другой библиотеки, компилятор возвращает ошибку компилятора с указанием
'library.UserInfo' does not contain a definition for 'DeviceID' and no extension
method 'DeviceID' accepting a first argument of type 'library.UserInfo' could
be found
Хотя мое определение класса выглядит так:
public class UserInfo
{
public static UserInfo Current
{
get
{
if (UserInfoPrincipal.Current != null)
{
return UserInfoPrincipal.Current.UserData;
}
else
{
return null;
}
}
}
public string UserID { get; set; }
public string DeviceID { get; set; }
public string MikeLiUserID { get; set; }
public string TransactionServer { get; set; }
public string ApplicationKey { get; set; }
public string IpAddress { get; set; }
}
Код ошибки выглядит следующим образом:
internal LogDetail BuildLogDetail(LogType entryType, string message)
{
return new LogDetail
{
ActingUserID = UserInfo.Current.UserID,
ActingDeviceID = UserInfo.Current.DeviceID,
ApplicationKey = UserInfo.Current.ApplicationKey,
IpAddress = UserInfo.Current.IpAddress,
EntryType = entryType,
OwnerID = UserInfo.Current.UserID,
LogData = message
};
}
Я хотел бы отметить, что все остальные члены класса UserInfo проходят через компилятор правильно, и это просто DeviceID, который был добавлен сегодня, вызывает проблему. Я попытался очистить все, я попытался обновить все из TFS, вручную удалив каталоги obj и bin обоих проектов ... пока ничего не получилось.
ОБНОВЛЕНИЕ : Этот код, который является частью библиотеки, работает правильно:
public class UserInfoPrincipal : IPrincipal
{
public static UserInfoPrincipal Current
{
get
{
if (Thread.CurrentPrincipal is UserInfoPrincipal)
return (UserInfoPrincipal)Thread.CurrentPrincipal;
else
return null;
}
}
...
internal UserInfo UserData
{
get { return _userInfo; }
}
public string DeviceID
{
get { return _userInfo.DeviceID; }
}
...
}