我有一个使用telerik控件的Web应用程序(asp.net webforms),例如telerik:ReportViewer和telerik:RadTimePicker。
有趣的是,telerik库广泛使用相同的dll(例如System.Web.Extensions),导致IIS管理器发出" Duplicate Reference"错误。试图简单地删除重复的引用会导致网站的某些部分停止工作。
如何在Web.config
内对单个DLL进行相同的引用,而无需添加重复项?
看看原因:
<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>
IIS报告上面每个section
元素的重复引用。删除它们会导致时间选择器在单击时不显示。
其他地方也有同样的引用:
<compilation debug="true">
<assemblies>
...
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
...
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
...
</compilation>
还有:
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
<modules>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
使用Visual Studio(调试)运行时,一切正常。但是,一旦部署到IIS,IIS就会报告重复错误!!
答案 0 :(得分:1)
您的网站似乎已从旧的.NET版本更新,并且已成为新版.NET不需要的部分。默认情况下,VS并没有真正在IIS上运行,因此它可能无法读取整个web.config,因此开发工作正在开发。
所以,你可以尝试的是:
启动一个新的空白WebForms应用程序,目标是.NET 4或.NET 4.5,具体取决于您的目标并复制其web.config。您需要确保的是您可以正确运行MS AJAX,因此页面上的简单asp:UpdatePanel应该让您首先拥有一个工作页面。这包括确保所有网络资源请求都通过。
在此处查看您需要为Telerik控件添加的内容:http://www.telerik.com/help/aspnet-ajax/web-config-settings-overview.html#mandatory-additions。它只是一些处理程序,那些错误输出的部分由核心MS AJAX功能使用。
尝试将旧的Web.Extensions程序集的 bindingRedirect 元素添加到新的。