【问题标题】:Compilation error only in server: The base class includes the field ‘MyControl_1′, but its type (MyControl) is not compatible (ASP.MyControl_ascx)仅在服务器中的编译错误:基类包含字段“MyControl_1”,但其类型(MyControl)不兼容(ASP.MyControl_ascx)
【发布时间】:2012-09-13 01:14:34
【问题描述】:

我很绝望。

我们有一个使用 Framework 2.0 的 ASP.NET (webforms) 小项目。我对 UserControl (ASCX) 进行了一些维护。我是我的开发机器,但当我将文件上传到服务器时,会抛出此异常:

基类包括字段‘MyControl_1’,但它的类型 (MyControl) 与控件类型不兼容 (ASP.MyControl_ascx)

我几乎尝试了所有方法:

这只发生在生产服务器中。我尝试将 ASCX 包装在命名空间中:

代码:

namespace MyControl {
   ...
}

ASCX:

Inherits="MyControl.Control"

使用控件的ASPX:

<%@Import Namespace="MyControl" %>
<%@ Register Src="Controls/SomeControl.ascx"  TagName="SomeControl" TagPrefix="uc2" %>
<uc2:SomeControlID="Control1" runat="server" />

编译模式不是使用固定的程序集命名,无法更改。

【问题讨论】:

    标签: c# asp.net user-controls webforms asp.net-2.0


    【解决方案1】:

    我访问了 OP 提供的页面: https://support.microsoft.com/en-us/kb/919284?wa=wsignin1.0

    第二个建议对我有用:

    方法2:重新排序应用程序中的文件夹

    所以,最后,我将所有控件放在同一个子文件夹中,并且效果很好。可能不是每个人都可以选择,但值得一试。

    【讨论】:

      【解决方案2】:

      我也遇到过类似的问题。我找到了解决方法 - 更改用户控件声明。

      您的生产服务器可能正在运行一个网络应用程序。 Web 应用程序期望用户控件中的声明具有某种格式。您可能已将基于文件的项目中其他地方构建的用户控件放置到 Web 应用程序中?

      使用 Web 应用程序用户控件(默认情况下),您将获得 CodeBehind="MyControl.ascx.vb"AppName.MyControl 的继承。

      使用基于文件的项目,您将获得 CodeFile="MyControl.ascx.vbMyControl 的继承。

      我更改了用户控件中的声明,直到它起作用。进行更改并重新编译后,您可能需要向生产服务器提供新的 dll。

      【讨论】:

        【解决方案3】:

        确保您的page 已经包含任何usercontrol 将被更新以发布 因此,在这种情况下,您将发布 UsercontrolPage 并为两者预编译 dlls

        【讨论】:

          猜你喜欢
          • 2013-09-17
          • 1970-01-01
          • 2011-04-14
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 2015-03-27
          • 2010-11-19
          • 1970-01-01
          相关资源
          最近更新 更多