2008-10-21 39 views
2

我有一个简单的界面:类将编译测试/控制台,但不是在Asp.net应用

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

这似乎代码的其他重要位是VisitorsLogController,不是吗?它看起来像VisitorsLogController正在实现一个不同的 IVistorsLogController接口。

我认为,右键单击和GoTo Definition应该可以解决问题。

0

我将通过检查所涉及的每个文件的命名空间开始,并确保你不会有冲突,或者你不期待一个命名空间。

1

出于兴趣,你可以编译以下行:

ctl = VisitorsLogController.Instance; 

?我只是想知道你是否有两个接口命名为相同的东西。

当您键入ctl.并按下Ctrl-Space时,Intellisense会提示您什么?

+0

约翰 - 是的,编译好。但是,只要我放入ctl.GetUniqueMembersCount(),编译失败。 键入ctl.and Ctl + Space显示列表中的GetUniqueMembersCount。 (我无法上传我的截图)。 – 2008-10-21 20:25:29

0

该解决方案包含网站和三个类项目(数据层,服务层和核心服务)。它们作为项目的参考添加到网站中。 我已经为Release发布了一个解决方案 - 发布了该站点,然后将配置更改为Debug。

很明显发生了什么事情是发布dll在网站的/ bin文件没有被新的Debug dll覆盖。我手动删除了/ bin目录中的所有文件,并且注视着 - 完美编译的所有内容。

因此,马克和约翰 - 你们都在 - 我有效地确实有两个接口命名为相同的东西。

非常感谢您的帮助 - 如果您没有给我这些指示,我永远不会终于完成。

相关问题