类将为Tests / Console编译,但不会在Asp.net应用程序中编译

时间:2008-10-21 17:52:10

标签: asp.net compiler-construction

我有一个简单的界面:

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页面时抱怨。

它不能缺少使用指令或汇编引用,否则两种方法都会失败。

这让我疯了!

有什么想法吗?

谢谢,

杰里米

4 个答案:

答案 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目录中的所有文件,并且看得出来 - 一切都编译得很完美。

所以马克和约翰 - 你们两个都有 - 我实际上确实有两个名字相同的接口。

非常感谢你的帮助 - 如果你没有给我这些指示,我将永远不会解决这个问题。