3

我遇到了 ReportViewer 控件的版本问题。我正在使用 Visual Studio 2010,但我认为我需要使用 2005 报表查看器,因为我使用的是 SQL 2005。因此,我将 webconfig 文件设置为指向 2005 ReportViewer .dll,一切正常,然后 VS 编辑网络.config 指向 2010 版本的 dll。这是相关的网络配置文件部分设置了我认为正确的内容:

<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。我怎样才能防止这种情况?

4

3 回答 3

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,但安装单独的报表查看器可再发行组件可能会提供相同的选择:

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

于 2012-06-07T12:38:15.713 回答
1

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

于 2012-05-03T10:26:21.933 回答
1

可以使用 win forms 应用程序访问 SQL 报告。使用 VS2010 开发,ReportViewer 组件版本=9.0.0.0。

以下是步骤:

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

注册程序集="Microsoft.ReportViewer.WebForms, 版本=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 组件

例如

<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= 进行更改

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

值得注意的是,在 VS 中使用同时具有源视图和设计视图的 .aspx 页面时,在设计视图中会显示 Error Creating Contol – 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 年,但是,通过首先创建副本/备份来确保一切正常,因为没有回头路。一旦你实现了这一点,以上所有这些都变得不必要了,对我们来说这只是一个临时解决方案。

于 2014-07-03T14:17:59.510 回答