安装 Crystal Report 9.2 后产生的问题及解决方案

来源:互联网 发布:sql 去重复 编辑:程序博客网 时间:2024/05/03 14:13

一、引言

在.NET 里,DLL Hell 问题被解决——包含元数据的,具有自描述性的程序集及其 XCopy 部署!
但是,又似乎带来了新的问题——.NET 程序升级、迁移问题……
升级不再只是简单安装,有工作不得不做了……

 二、概念与原理

1、各种 Crystal Reports 程序的“程序集版本”……

Crystal Reports for Visual Studio .NET 2002
Crystal Reports 管理组件的“程序集版本”为 9.1.3300。

Crystal Reports for Visual Studio .NET 2003 的程序
Crystal Reports 管理组件的“程序集版本”为 9.1.5000.0。

Crystal Reports 9 的程序(仅限于 Visual Studio 2002)
Crystal Reports 管理组件的“文件版本”为 9.2.9466.x。

Crystal Reports 9.2 的程序(与 Visual Studio 2002 和 2003)
Crystal Reports 管理组件的“文件版本”为 9.2.9500.x。

2、Crystal Report Viewer

VS.NET 里的 Crystal Report Viewer 版本是 9.1.3300.0,
Crystal Report 9.2 里的 Crystal Report Viewer 版本是 9.2.3300.0
为窗体添加 Crystal Report Viewer 后,会在 aspx 文件里增加以下代码,缺一不可。
代码(1)<%@ Register TagPrefix=\"cr\" Namespace=\"CrystalDecisions.Web\" Assembly=\"CrystalDecisions.Web, Version=9.1.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304\" %>
是为了引入命名空间 CrystalDecisions.Web。
代码(2)<CR:CrystalReportViewer id=\"CrystalReportViewer1\" runat=\"server\" EnableDrillDown=\"False\" DisplayGroupTree=\"False\" Height=\"50px\" Width=\"350px\"></CR:CrystalReportViewer>
是表示 CrystalReportViewer 控件的标签。

三、问题

1、编译器错误信息: </b>BC30560: “CrystalReportViewer”在命名空间“CrystalDecisions.Web”中不明确。

 问题分析:
在“设计视图”删除 Crystal Report Viewer 后,代码(1)仍然存在,如果此时再次添加新版本的 Crystal Report Viewer,会导致出现两个不同的代码(1):
<%@ Register TagPrefix=\"cr1\" Namespace=\"CrystalDecisions.Web\" Assembly=\"CrystalDecisions.Web, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304\" %>
<%@ Page language=\"vb\" Codebehind=\"Analysis.aspx.vb\" AutoEventWireup=\"false\" Inherits=\"Research_VB.Analysis\" %>
<%@ Register TagPrefix=\"cr\" Namespace=\"CrystalDecisions.Web\" Assembly=\"CrystalDecisions.Web, Version=9.1.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304\" %>

解决方案:
把 Crystal Report Viewer 和所有代码(1)删除,重新添加 Crystal Report Viewer。

2、复制 Crystal Report Viewer 时,显示“控件创建错误”。

问题分析:
复制 Crystal Report Viewer 时,代码(1)不会被复制。

解决方案:
手工复制代码(1)。

3、创建 Crystal Report Viewer 时,显示“控件创建错误”。

 问题分析:
如果不是残存代码(1),就是匪夷所思……

解决方案:
(1)先在“设计视图”删除 Crystal Report Viewer 控件;
(2)再到“HTML 视图”删除代码(1)
(3)创建 Crystal Report Viewer ;
如果显示“控件创建错误”,则切换到“HTML”视图,再切换会“设计”视图,自动恢复!!!

4、分析器错误信息: 基类包括字段“CrystalReportViewer1”,但其类型 (CrystalDecisions.Web.CrystalReportViewer) 与控件 (CrystalDecisions.Web.CrystalReportViewer) 的类型不兼容。

 问题分析
代码(1)不是当前 Crystal Report Viewer 的版本

解决方案:
把 Crystal Report Viewer 和所有代码(1)删除,重新添加 Crystal Report Viewer。

5、分析器错误信息: 找到的名为“CrystalDecisions.Shared”的程序集清单定义与程序集引用不匹配。
源文件: E:webVenditionSystemweb.config    行: 15
程序集加载跟踪: 下列信息有助于确定程序集“CrystalDecisions.Shared”无法加载的原因

 问题分析
程序集 CrystalDecisions.Shared 在 web.config 里的程序集清单定义是 CR FOR VS.NET 版本的,而项目中引用的是 CR 9.X 版本的……

解决方案一:
新建一个解决方案,在窗体里添加 Crystal Report Viewer,会自动在 web.config 中生成新版本的程序集清单定义,然后把这个 web.config 复制过来……
解决方案二:
修改 web.config 里的旧版本的程序集清单定义:
<add assembly=\"CrystalDecisions.Shared, Version=9.1.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304\"/>
把 Version=9.1.3300.0 改成 Version=9.2.3300.0。

总结:其它 CrystalDecisions 程序集引用的冲突问题如:CrystalDecisions.CrystalReports.Engine,解决方案同上。

6、问题:无效的报表源

 问题分析:
ReportDocument、CrystalReportViewer 组件和 CrystalDecisions 程序集的版本不一致:

解决方案:
(1)删除所有的 CrystalDecisions 程序集引用;
(2)删除所有的ReportDocument、CrystalReportViewer 组件;
(3)按照2、修改 Visual Studio.NET 的工具箱设置;
(4)重新添加组件,自动生成新引用。

7、如果你用的是 VS.NET 2003……
问题:就是不行。 升级后没有拖放控件没有代码(1)!!!

问题分析:
如果你用的是 VS.NET 2003,则 Crystal Reports 9 (版本 9.2.0.x) 不能正确运行,需要升级到 CR 9 (版本 9.2.2.x). 
具体问题如下:
- 添加新报表到项目,却没有生成相应的报表类文件
- 添加新报表或者报表查看器(viewer)到项目,却没有自动添加必需的引用
- 不能创建强类型报表(strongly-typed report)的实例

解决方案:
升级到 CR 9 (版本 9.2.2.x). 

8、问题:在 web.config 中新建一个工程时没有<assemblies><add assembly=\"CrystalDecisions.CrystalReports.Engine, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304\"/>
我手工添加后出现配置错误!!!

解决方案:
新建一个解决方案,添加 Crystal Report 文件和 Crystal Report Viewer,然后用它的 Web.config 覆盖原来的程序……

 

原创粉丝点击