基类包括字段'X',但其类型(System.Web.UI.ScriptManager)与控件类型(System.Web.UI.ScriptManager)不兼容

时间:2009-02-24 17:06:55

标签: asp.net asp.net-ajax

完整错误是

  

基类包含字段'ScriptManager1',但其类型(System.Web.UI.ScriptManager)与控件类型(System.Web.UI.ScriptManager)不兼容。

其他人遇到此错误?

12 个答案:

答案 0 :(得分:37)

我设法通过将其添加到web.config来修复它:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

我相信它会强制.net运行时使用这些程序集的新版本。

答案 1 :(得分:7)

将Web应用程序从.NET 2.0升级到3.5时,我遇到了这个问题。

检查您的web.config是否正确设置为.NET 3.5。我添加/更改了以下内容:

  <configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>

      <assemblies>
        <!--<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>-->
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>

   <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
   <httpHandlers>



        <pages enableSessionState="true" validateRequest="true">
            <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>

    <httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>

                                                                                                                                                                                                                          

答案 2 :(得分:2)

添加上面的<runtime>部分修复了我们的开发机器和测试服务器上的问题,但不是我们的实时服务器。

事实证明,如果您的web.config文件包含xmlns属性xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0",那么您将收到GAC冲突:

BAD.web.config
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
etc

但是这个版本来自devt机器很好:

GOOD.web.config
<?xml version="1.0"?>
<configuration>
etc

因此,请确保从web.config文件的顶部删除2.0引用。

答案 3 :(得分:1)

您也可以在.vbproj文件中解决此问题(在我的情况下)。检查这些条目:

<Reference Include="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>

这似乎也强制使用3.5版本的DLL。

答案 4 :(得分:0)

我们遇到了一个非常相似的问题。开发平台工作正常但是一旦将站点部署到测试站点,它就会破坏与上面原始海报相同的消息。 我们在控件目录下有子目录,用于将用户控件组合在一起。该问题似乎是在子目录中尝试在其上方的目录中使用控件的控件。我们的第一个修复是将顶层控件克隆到子目录。 然后,我们想到了创建并行兄弟子目录并将控件停在那里的想法。这解决了问题,而不必诉诸于(a)展平我们的控件目录结构或(b)克隆各个子目录中的相同控件。

因此,我们的解决方案是永远不要从子目录中的用户控件引用父目录中的控件。

我希望这会有所帮助。

答案 5 :(得分:0)

这也可以通过将项目引用更改为System.Web.Extensions 1.0.61025或其他版本来解决,确保项目引用,web配置和ajax工具包都匹配相同的版本。

答案 6 :(得分:0)

当使用“Application is updatable”标志从命令行预编译我们的应用程序时,我们遇到了同样的问题:

aspnet_compiler.exe -u

删除-u标志解决了这个问题。不要问我为什么!

答案 7 :(得分:0)

非常相似的问题。 “基类包括字段'WebUserControl1',但其类型(common_WebUserControl)是......”将标记文件从CodeFile=更改为CodeBehind=

答案 8 :(得分:0)

就我而言,只是将构建框架从2.0切换到3.5。

通过右键单击项目名称(解决方案资源管理器的顶部)并选择“属性页”来完成此操作。从那里,选择构建选项并更改框架。

它应该更新web.config和所有需要的引用。

HTH

戴夫

答案 9 :(得分:0)

有类似的问题从3.5更新到4.0。在我的例子中,有一个根网站,以及它下面的虚拟IIS应用程序目录。

该代码在我的开发和暂存区域中运行良好。

一旦它进入生产服务器,它就崩溃了。即使代码是相同的。

我的解决方案是删除虚拟目录并重新创建它。确保应用程序池正确,并且asp.net版本是正确的。 (我的服务器是带有IIS6的Windows Server 2003)。

另一个重要注意事项 - 您无法在同一个应用程序池中运行多个asp.net版本。

答案 10 :(得分:0)

  

“基类包括字段'ScriptManager1',但是它的类型   (System.Web.UI.ScriptManager)与控件类型不兼容   (System.Web.UI.ScriptManager)。“

     

其他人遇到此错误?

我曾多次遇到过这种错误,尽管并非专门针对scriptmanager。基本上,当您在页面上控制一种类型时就会发生这种情况。可以说你有空闲了一段时间。但是之后你删除了控件并将另一个控件放在具有相同ID的位置,即何时可以发生。我相信它与过时的aspx.designer.cs相关或由其创建。

解决问题。我要么必须更改控件ID的名称,要么重建解决方案。我认为还有另一种方式。我想如果你有一个aspx文件名的aspx.designer.cs文件,你也可以在那里更改它。

答案 11 :(得分:0)

在阅读完这里的答案后,我发现问题出在IIS如何使用错误的版本来编译控件。我通过更新生产web.config解决了此问题: 在<system.web>下 加 <httpRuntime targetFramework="4.5.1" />