【问题标题】:Class in namespace can't find a sibling class in the same namespace that it inherits命名空间中的类在其继承的同一命名空间中找不到兄弟类
【发布时间】:2017-12-21 16:02:40
【问题描述】:

我的确切代码如下所示:

// ContractsUserControl
namespace AC.WebGUI.UserControls
{
    public partial class ContractUserControl : BaseUserControlObject
    {
        // Obviously stuff goes here.
    }
}

// BaseUserControlObject
namespace AC.WebGUI.UserControls
{
    public class BaseUserControlObject : System.Web.UI.UserControl
    {
        // A single property is declared here.
    }
}

当我使用 Visual Studio 进行调试时,这 100% 完美无缺,但在实时服务器上运行时,我收到编译错误:

CS0246:找不到类型或命名空间名称“BaseUserControlObject”(您是否缺少 using 指令或程序集引用?)

我不明白这怎么会发生,因为这两个类都存在于同一个命名空间中,并且两个类都是公共的,所以不需要使用引用。

我所知道的关于 ASPX 的一切都表明这应该可以工作,所以我什至不知道从哪里开始寻找问题的原因。

【问题讨论】:

  • 它们是分开编译的吗?例如。是代码隐藏或App_Code 文件的一部分,而另一部分不是?
  • 可能因为你没有预编译你的项目,你有一些冲突。您应该删除这些 DLL 并重新部署。
  • BaseUserControlObject 实际上不是用户控件 - 它只是一个 C# 类,但两个文件都不在 App_Code 中

标签: c# asp.net namespaces


【解决方案1】:

程序集和命名空间是两个不同的东西。即使这些类在同一个命名空间中,它们也可以在不同的程序集中,并且如果由于某种原因加载了包含基类的旧版本的程序集,实际上 not 包含基类@987654321 @,那么你会得到这个错误信息。

在调试时,Visual Studio 通常会编译所有内容,因此这就是为什么您在调试中看不到异常的原因,但可能您的服务器部署工具没有识别出包含 BaseUserControlObject 的程序集的版本已过时。

编辑: 我可以想象服务器部署失败的原因之一是,旧版本的库已添加到 GAC,但版本号并未增加。在这种情况下,服务器将从 GAC 加载程序集,而不是从本地加载程序集。然而,这只是一个疯狂的猜测。

【讨论】:

  • 假设我的同事在没有发布的情况下上传了项目文件夹是问题的原因。我现在正在上传已发布的版本,并将更新问题是否消失
  • 上传完成,网站正常运行。我实际上发布了该项目,并告诉它预编译以使其正常工作。
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 2012-05-27
  • 2017-10-04
  • 2011-12-30
  • 2015-07-18
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多