在web.config中对同一个dll的多个引用

时间:2015-02-08 15:27:46

标签: c# asp.net iis telerik web-config

我有一个使用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就会报告重复错误!!

1 个答案:

答案 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 元素添加到新的。

相关问题