ReportViewer错误 - 报告的定义“无效。无法加载文件或程序集Microsoft.ReportViewer.ProcessingObjectMode

时间:2013-08-24 06:26:53

标签: c# .net winforms reportviewer

我的项目中有ReportViewer。当我在Vsual Studio 2012的InstallShield中创建此文件的.exe时,我添加到Redistributables Microsoft ReportViewer 2010

当我在Windows 8上安装我的应用程序时 - 每个ReportViewer都会正确显示它的报告。

我在Windows XP上有问题,ReportViewer正确加载但是显示此错误而不是正确的报告:

  

本地报告处理期间发生错误。的定义   报告"是无效的。报告中出现意外错误   处理

     

无法加载文件或程序集   Microsoft.ReportViewer.ProcessingObjectMode。版本= 11.0.0。,   Culture = neutral,PublicKeyToken = 89845dc8080cc91或其中一个   依赖。这个系统找不到指定的文件。

我在references I have added Microsoft.ReportViewer.Winfroms 11.0.0.0Copy Local = true确认您。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:15)

我赞成了标记为答案的答复,因为我实际上是缺少.dlls - 但我没有以@Marek建议的方式修复它。我正在使用VS2013并安装Microsoft.Reporting nuget包修复了这个问题。我会建议任何有这个问题的人尝试这个。这样,您就可以自动获得所有依赖项。

enter image description here

答案 1 :(得分:11)

发现此错误表示您遗漏了Microsoft.ReportViewer.PorcessingObjectMode.dll version 11.0.0.0。有一个解决方案:

Windows 8机器上执行以下操作:

  1. 打开dos命令提示符(按START + R然后键入cmd并按ENTER键)

  2. 输入cd ..,直到您C:\ >输入Cd windows\assembly\gac_msil\Microsoft.ReportViewer.pro*并按Enter键

  3. 只需输入cd 11*

  4. 即可
  5. 然后输入copy * c:\

  6. .dll将被复制到您的C目录。

  7. 只需将此文件复制到Program Files Windows XP machine上已安装应用程序的文件夹中。

  8. 希望它对其他人有帮助,因为我长期坚持这个问题。

答案 2 :(得分:1)

Marek的答案非常棒并且帮助了我,我只是想添加一个我需要的额外文件。

除了

Microsoft.ReportViewer.ProcessingObjectModel.dll

我还需要

Microsoft.SqlServer.Types.dll

(我是从拥有SQLServer但不是Reporting Services 的服务器上运行的,所以也许这就是第二个文件丢失的原因。)

正如Marek所指出的,您需要使用命令提示符复制文件,因为GAC_MSIL中的DLL在Windows资源管理器中是隐藏的,因此如果使用资源管理器搜索它们,您将看不到它们。 我很难过,因为我正在生成一个带有日常任务的PDF,所以我在日志文件中看到的只是隐秘的错误"An error occurred during local report processing."我从未见过ReportViewer的脸,至少告诉你丢失的文件。

为了解决这个问题,我创建了一个quickie测试程序并显示了ReportViewer,这使我更清楚我需要哪些DLL: enter image description here

答案 3 :(得分:1)

开始

必须安装'Microsoft.Report.Viewer''ReportViewer.WebForms''的 nuget 软件包Microsoft.ReportViewer.WinForms” “ Microsoft.SqlServer.Types”

https://www.nuget.org/packages/ReportViewer.WebForms/

https://www.nuget.org/packages/Microsoft.ReportViewer.WinForms/

https://www.nuget.org/packages/Microsoft.Report.Viewer/

https://www.nuget.org/packages/Microsoft.SqlServer.Types/

然后应该在web.config中检查一些标签

<system.web>
    <compilation debug="true" targetFramework="4.5">
        <buildProviders>
            <add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" />
        </buildProviders>
        <assemblies>
            <add assembly="Microsoft.ReportViewer.Common, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" />
            <add assembly="Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" />
        </assemblies>
    </compilation>
    <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" validate="false" />

    <assemblyBinding>
        <dependentAssembly>
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
<system.webServer>
    <handlers>
        <add name="ReportViewerWebControlHandler" verb="*" path="Reserved.ReportViewerWebControl.axd" preCondition="integratedMode" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91" />
    </handlers>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>