我有一个简单的界面:
public interface IVisitorsLogController
{
List<VisitorsLog> GetVisitorsLog();
int GetUniqueSubscribersCount();
int GetVisitorsCount();
string GetVisitorsSummary();
}
VisitorsLogController类实现了这个接口。
从控制台应用程序或TestFixture - 没问题 - 控制台/测试夹具编译完美。
然而,来自Asp.Net网站(不是应用程序)的相同解决方案中的代码背后的代码
private IVisitorsLogController ctl;
protected int GetUniqueMembersCount()
{
ctl = new VisitorsLogController();
return ctl.GetUniqueSubscribersCount();
}
编译器抛出此异常:
错误1'WebSiteBusinessRules.Interfaces.IVisitorsLogController' 不包含的定义 'GetUniqueSubscribersCount',没有 扩展方法 'GetUniqueSubscribersCount'接受 类型的第一个参数 'WebSiteBusinessRules.Interfaces.IVisitorsLogController' 可以找到(你错过了吗? 使用指令或程序集 引用?)
但是对于同一文件中的此代码:
protected static int GetVisitorsCount()
{
return VisitorsLogController.Instance.GetVisitorsCount(DateTime.Today);
}
编译器在没有抱怨的情况下编译这些行。事实上,如果我向接口添加任何新内容,编译器现在会在尝试编译asp.net页面时抱怨。
它不能缺少使用指令或汇编引用,否则两种方法都会失败。
这让我疯了!
有什么想法吗?
谢谢,
杰里米
答案 0 :(得分:1)
出于兴趣,您可以编译以下行:
ctl = VisitorsLogController.Instance;
?我只是想知道你是否有两个名字相同的接口。
当您键入ctl.
并按Ctrl-空格键时,Intellisense会提示您什么?
答案 1 :(得分:0)
我首先检查所涉及的每个文件的命名空间,并确保没有您不期望的冲突或命名空间。
答案 2 :(得分:0)
似乎代码的另一个重要部分是VisitorsLogController,不是吗?看起来VisitorsLogController正在实现不同的 IVistorLogController接口。
我认为右击和GoTo定义应该清理一切。
答案 3 :(得分:0)
该解决方案包含网站和三个类项目(数据层,服务层和核心服务)。它们作为项目添加为网站的引用。 我曾在Release上编译过该解决方案 - 发布了该站点,然后将配置更改为Debug。
显然,发生的事情是网站的/ bin文件中的Release dll没有被新的Debug dll覆盖。我手动删除了/ bin目录中的所有文件,并且看得出来 - 一切都编译得很完美。
所以马克和约翰 - 你们两个都有 - 我实际上确实有两个名字相同的接口。
非常感谢你的帮助 - 如果你没有给我这些指示,我将永远不会解决这个问题。