我遇到了有史以来最奇怪的问题。我正在编译一个库,该库在用户信息类中具有新添加的属性 DeviceID。库内部使用该类型,它是新属性就可以了,但是当我尝试从另一个库引用它时,编译器会回一个编译器错误,指出
'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; }
}
...
}
所以我的冰雹玛丽通行证是删除项目引用,然后再次添加它。然后它编译了。不知道为什么会起作用,但我想我会在这里发布它,供其他可能遇到相同问题的人使用。
其他库使用的是项目引用还是二进制引用?如果是二进制引用,您确定它使用的是最新版本吗?
检查生成错误的项目的引用路径;请确保引用库项目(如果它是解决方案的一部分)或库的最新版本(如果不是)。
我以前遇到过一些这样的情况。以下是对我有用的方法:
这两个代码示例是否位于不同的项目中?如果是这样,我会说尝试重建第一个项目(包含 UserInfo 类),然后取出编译失败的行并尝试重建第二个项目。然后全部重建。然后重新添加有问题的行并全部重建。
可能不适合你,但值得一试。我知道这种情况令人沮丧。
- 尝试重新创建显示问题的行。写下对象周期的名称(.),然后等待VS显示可用项目列表
我遇到了一个非常相似的问题。
就我而言,我有一段代码,我每年只需要运行几次。 当我尝试使用它时,访问会员时出错。 自从我上次使用代码以来,什么都不应该改变。 Intellisense 在 Visual Studio 中使用"."时检测到成员。 我重新启动了Visual Studio和计算机,但问题仍然存在。
最后为了解决我的问题,我创建了一个新文件,将代码从原始文件复制到新文件,仅此而已。 无需修改代码。 我使用了Ctrl-C,Ctrl-V,因此内容没有通过手动触摸进行校正。 这不是复制和粘贴第一次修复错误,因此值得将这个想法保留在工具箱中。
有时,一个神秘的问题需要一个同样神秘的解决方案。
就我而言,这是 Web 应用程序的项目属性问题。为了修复它,我做了以下工作:
- 右键单击该项目>然后单击"属性"。
- 在"生成"选项卡上,将所有配置的"输出路径"值更改为:bin\
以前,我的输出路径是 bin\Debug 或 bin\Release ,具体取决于我正在查看的配置。我不知道为什么这会破坏我的标记页面在我的代码隐藏中查看方法的能力,但它确实如此。一旦我更改了它,错误就消失了。
这是在VS2012和更新2中。
我的解决方案:我创建了另一个名称方法设置属性。我的问题出在VS2015 + Silverlight 5上