无法转换 'CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass' 类型的 COM 对象
Unable to cast COM object of type 'CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass'
我有 2 个 windows 程序。
计划 A:创建 visual studio 2015 年 crystal 报告 SP18
程序 B:创建 visual studio 2017 年 crystal 报告 SP22
我有一台计算机 crystal 报告 运行时间 SP 18。
我运行在那台计算机上编写程序A。程序A可以创建报告。我 运行 在那台计算机上编写 B 程序。程序 B 无法创建报告。因此,我将 crystal 报告 运行time 升级到 SP22。结果是程序 B 可以创建报告。
现在的问题是升级后程序A无法创建报告。错误是:
System.InvalidCastException: Unable to cast COM object of type 'CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass' to interface type 'CrystalDecisions.ReportAppServer.Controllers.ISCRReportSource'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{98CDE168-C1BF-4179-BE4C-F2CFA7CB8398}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
at CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Refresh()
at CrystalDecisions.ReportSource.EromReportSourceBase.Refresh(RequestContext reqContext)
at CrystalDecisions.CrystalReports.Engine.FormatEngine.Refresh(RequestContext reqContext)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.Refresh()
at CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataTable dataTable)
at Portal_Inkaso.frIndex.PerintahCetakTT()
at Portal_Inkaso.frIndex.Perintah1()
at Portal_Inkaso.frIndex.llbPerintah_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e)
at System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e)
at System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Label.WndProc(Message& m)
at System.Windows.Forms.LinkLabel.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我该怎么办?降级 crystall 报告 运行时间还是什么?
google 了半天,终于找到解决办法了。
解决方法是在app.config/web.config
中添加如下代码
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.CrystalReports.Engine" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportSource" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Shared" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Web" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Windows.Forms" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.ClientDoc" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.CommonControls" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.CommonObjectModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.Controllers" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.CubeDefModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.DataDefModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.DataSetConversion" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.ObjectFactory" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.Prompting" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.ReportDefModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.XmlSerialize" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
这是来源Crystal Reports, Developer for Visual Studio Downloads
只需删除 crystal 报告的旧引用并添加新程序集。这是由于 crystal 报告版本差异旧编译与旧版本一起使用。
只需添加当前版本的新参考程序集和干净的解决方案并重建项目和运行。
有效。
我用的是win 10 64位
应用服务器使用 64 位OS。
对于这个问题,我可以给你建议:
- IIS 应用程序池:已启用 32 位应用程序
- 在我的案例中,另一个团队使用 CR Runtime SP 20. And my app use CR Runtime SP 21。我的电脑是64位OS但是我安装了CR Runtime SP 21 32位版本,然后这个问题就解决了(我必须先卸载CR Runtime SP 20,然后再安装CR Runtime SP21)
案例已解决,我们应该将旧版本的 CR 升级到新版本(我的情况是 SP 21),反之亦然。
也许您当前的 CR 运行时是 SP 21 或更高版本。尝试降级到 CR SP 20 或以下。
我有 2 个 windows 程序。
计划 A:创建 visual studio 2015 年 crystal 报告 SP18
程序 B:创建 visual studio 2017 年 crystal 报告 SP22
我有一台计算机 crystal 报告 运行时间 SP 18。
我运行在那台计算机上编写程序A。程序A可以创建报告。我 运行 在那台计算机上编写 B 程序。程序 B 无法创建报告。因此,我将 crystal 报告 运行time 升级到 SP22。结果是程序 B 可以创建报告。
现在的问题是升级后程序A无法创建报告。错误是:
System.InvalidCastException: Unable to cast COM object of type 'CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass' to interface type 'CrystalDecisions.ReportAppServer.Controllers.ISCRReportSource'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{98CDE168-C1BF-4179-BE4C-F2CFA7CB8398}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease)
at CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Refresh()
at CrystalDecisions.ReportSource.EromReportSourceBase.Refresh(RequestContext reqContext)
at CrystalDecisions.CrystalReports.Engine.FormatEngine.Refresh(RequestContext reqContext)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.Refresh()
at CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataTable dataTable)
at Portal_Inkaso.frIndex.PerintahCetakTT()
at Portal_Inkaso.frIndex.Perintah1()
at Portal_Inkaso.frIndex.llbPerintah_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e)
at System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e)
at System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Label.WndProc(Message& m)
at System.Windows.Forms.LinkLabel.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我该怎么办?降级 crystall 报告 运行时间还是什么?
google 了半天,终于找到解决办法了。
解决方法是在app.config/web.config
中添加如下代码<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.CrystalReports.Engine" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportSource" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Shared" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Web" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.Windows.Forms" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.ClientDoc" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.CommonControls" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.CommonObjectModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.Controllers" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.CubeDefModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.DataDefModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.DataSetConversion" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.ObjectFactory" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.Prompting" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.ReportDefModel" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CrystalDecisions.ReportAppServer.XmlSerialize" publicKeyToken="692fbea5521e1304" culture="neutral"/>
<bindingRedirect oldVersion="13.0.2000.0" newVersion="13.0.3500.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
这是来源Crystal Reports, Developer for Visual Studio Downloads
只需删除 crystal 报告的旧引用并添加新程序集。这是由于 crystal 报告版本差异旧编译与旧版本一起使用。
只需添加当前版本的新参考程序集和干净的解决方案并重建项目和运行。
有效。
我用的是win 10 64位
应用服务器使用 64 位OS。
对于这个问题,我可以给你建议:
- IIS 应用程序池:已启用 32 位应用程序
- 在我的案例中,另一个团队使用 CR Runtime SP 20. And my app use CR Runtime SP 21。我的电脑是64位OS但是我安装了CR Runtime SP 21 32位版本,然后这个问题就解决了(我必须先卸载CR Runtime SP 20,然后再安装CR Runtime SP21)
案例已解决,我们应该将旧版本的 CR 升级到新版本(我的情况是 SP 21),反之亦然。
也许您当前的 CR 运行时是 SP 21 或更高版本。尝试降级到 CR SP 20 或以下。