ReportViewer控件版本冲突

时间:2012-05-02 16:09:01

标签: visual-studio visual-studio-2010 sql-server-2005 reporting-services reportviewer

我遇到了ReportViewer Control的版本问题。我正在使用visual studio 2010,但我认为我需要使用2005报表查看器,因为我使用的是SQL 2005.所以,我将webconfig文件设置为指向2005 ReportViewer .dll,一切正常,然后VS编辑网页.config指向2010版本的dll。以下是我认为正确的相关Web配置文件部分:

<httpHandlers>
  <add path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" />
  <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    validate="false" />
</httpHandlers>

<compilation>
  <assemblies>
    <add assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
    <add assembly="Microsoft.ReportViewer.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
  </assemblies>
  <buildProviders>
    <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </buildProviders>
</compilation>

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" 
       type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>

因此,在运行它并运行几次后,它会自动将http处理程序的版本更改为10.0.0.0。我该如何防止这种情况?

3 个答案:

答案 0 :(得分:3)

写入web.config的内容由您在项目中使用的引用定义。

在我的Visual Studio 2008项目中,我有以下参考:

  • Microsoft.ReportViewer.Common.dll(版本9.0.0.0)
  • Microsoft.ReportViewer.WebForms.dll(版本9.0.0.0)

所以在我的配置中我看到:

<system.web>
  ...
  <compilation>
    ...
    <buildProviders>
      <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />        
    </buildProviders>
  </compilation>
  ...
  <httpHandlers>
    <add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
  </httpHandlers>

当我查看可用的项目参考时,我有三个:

  • 版本8.0.0.0
  • 版本9.0.0.0
  • 版本10.0.0.0

我认为这是因为我安装了Visual Studio 2005,2008和2010,但是安装单个报表查看器可再发行组件可能会提供相同的选择:

N.B。我对版本号做了最好的猜测;如果你知道的更好,请纠正我。

答案 1 :(得分:1)

这不是您问题的准确答案,但可能是解决方案 无需使用旧版本的报告查看器。它独立于服务器。特别是使用.rdlc(客户端报告),您只提供数据并且报告不知道服务器。

答案 2 :(得分:1)

可以使用win form app访问SQL报告。使用VS2010开发的ReportViewer组件版本= 9.0.0.0。

以下是步骤:

要访问SQL 2005报告,您将必须使用报告查看器组件的Version = 9.0.0.0,如上所述。因此,您需要在要呈现报告的.aspx页面中或在其继承的母版页中使用此文件:

注册程序集=“Microsoft.ReportViewer.WebForms,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”namespace =“Microsoft.Reporting.WebForms”tagprefix =“rsweb”

这个

    <form id="foo" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" ProcessingMode="Remote" Width="950px"
                    Height="600" BorderColor="Gainsboro" BorderStyle="Solid" BorderWidth="1px">
        <ServerReport ReportPath="/foo/foo/FooReport"
                ReportServerUrl="http://foo/ReportServerSQL2005" />
    </rsweb:ReportViewer>
…

您可能还必须更改web.conig中任何其他版本的ReportViewer组件的引用,因为VS2010和更新版本将默认使用ReportViewer组件的新版本

e.g。

<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

更改为

<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

只需在整个解决方案中搜索Version = 8.0.0.0和Version = 10.0.0.0等,并对Version =和PublicKeyToken =

进行更改

您还需要在项目中引用reportviewer组件9.0.0.0,从.net选项卡中删除对任何其他版本的引用。

值得注意的是,在VS中使用包含源视图和设计视图的.aspx页面时,它会在设计视图中显示错误创建控件 - ReportViewer1。根据我的阅读,这是组件的一个错误,但无论如何它在所有主流浏览器中都有效。

此外,如果您要将组件从工具拖到设计图面上,您很可能需要添加9.0.0.0版本并确保它是您使用的版本。

我之前在这里回答了这个问题:

http://forums.asp.net/p/1985629/5691326.aspx?VS2010+ReportViewer+with+SQL+2005

但是,我的应用程序是.NET 3.5 MVC2应用程序,但经过一番努力后,我仍然可以通过它来呈现SQL2005报告。

理想情况下,您应该将2005 SQL报告服务更新为2008,但是,请确保通过先创建副本/备份仍能正常工作,因为没有回头路。一旦你实现了这一点,上述所有内容都变得不必要,对我们来说这只是一个临时解决方案。