仅在服务器中编译错误:基类包含字段“MyControl_1”,但其类型(MyControl)不兼容(ASP.MyControl_ascx)

时间:2012-09-20 16:07:06

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

我很绝望。

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

  

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

我几乎尝试过所有事情:

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

CODE:

namespace MyControl {
   ...
}

ASCX:

Inherits="MyControl.Control"

使用控件的ASPX:

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

编译模式没有使用固定程序集命名,我无法更改它。

3 个答案:

答案 0 :(得分:1)

我遇到过类似的问题。我找到了修复 - 更改用户控件声明。

您的生产服务器可能正在运行Web应用程序。 Web Apps期望用户控件中的声明具有特定格式。您可能已将基于文件的项目中的其他位置构建的用户控件放入Web应用程序中?

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

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

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

答案 1 :(得分:0)

请确保您已经包含已包含任何page的{​​{1}}将更新为发布 因此,在这种情况下,您将发布usercontrolUsercontrol并预先编译Page

答案 2 :(得分:0)

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

第二个建议对我有用:

  

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

所以,最后,我将所有控件放在同一个子文件夹中,并且工作正常。它可能不是每个人的选择,但值得尝试。