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

25
完整错误消息为:
基类包括字段“ScriptManager1”,但其类型(System.Web.UI.ScriptManager)与控件类型(System.Web.UI.ScriptManager)不兼容。
有其他人遇到过这个错误吗?

似乎是重复的。请参考Mitchell在此处给出的答案:http://stackoverflow.com/questions/582492/working-with-vs2008-3-5-asp-ajax-site-on-a-2-0sp1-ajax-extesnion-1-0-server - Ian Robinson
12个回答

38

我通过将以下内容添加到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 运行时使用这些程序集的新版本。


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
在我们的开发机器和测试服务器上,添加<runtime>部分解决了问题,但在我们的生产服务器上没有。事实证明,如果你的web.config文件包含xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"的xmlns属性,则会出现GAC冲突。
BAD.web.config
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
etc

但是来自开发机的这个版本已经很好了。
GOOD.web.config
<?xml version="1.0"?>
<configuration>
etc

因此,请确保从您的web.config文件顶部删除2.0参考。


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。


1
我们遇到了非常相似的问题。开发平台运行正常,但一旦将网站部署到测试站点上,就会出现与上面原始帖子相同的错误信息。 我们在控件目录下有子目录,以便将用户控件分组。问题似乎是子目录中的一个控件试图使用上面目录中的控件。我们的第一个解决方案是将顶级控件克隆到子目录中。 然后,我们想到了创建一个平行的兄弟子目录,并将控件停放在那里。这样就解决了问题,而不必采取(a)扁平化我们的控件目录结构或(b)在各个子目录中克隆相同的控件。 因此,我们的解决方案是永远不要从子目录中的用户控件引用父目录中的控件。 希望这能帮助到您。

我的问题(相当多年以后!)似乎是在各个文件夹中的aspx和ascx文件之间存在的。这特别棘手,因为错误没有报告我刚刚更改的代码 - 似乎我已经有了从文件夹UserControls/Y到文件夹X的有些不自然的依赖关系,并且我添加了一个新的依赖关系从X到UserControls/Y。编译器试图通过制作额外的DLL(例如App_Web_MyControl.ascx.463b83aa.dll)来解决它,与App_Web_0wdaov4p.dll一起,但我在部署时遇到了这个错误。一个存档的KB文章:https://mskb.pkisolutions.com/kb/919284 - Paul Stephenson

0

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


0

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

aspnet_compiler.exe -u

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

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

0

我曾经遇到过从3.5升级到4.0的类似问题。在我的情况下,有一个根网站和虚拟IIS应用程序目录。

代码在我的开发和分段区域中运行良好。

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

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接