目录:
一、引言
二、概念与原理
三、问题
1、编译器错误信息: </b>BC30560: “CrystalReportViewer”在命名空间“CrystalDecisions.Web”中不明确。
2、复制 Crystal Report Viewer 时,显示“控件创建错误”。
3、创建 Crystal Report Viewer 时,显示“控件创建错误”。
4、分析器错误信息: 基类包括字段“CrystalReportViewer1”,但其类型 (CrystalDecisions.Web.CrystalReportViewer) 与控件 (CrystalDecisions.Web.CrystalReportViewer) 的类型不兼容。
5、分析器错误信息: 找到的名为“CrystalDecisions.Shared”的程序集清单定义与程序集引用不匹配。
6、问题:无效的报表源
7、如果你用的是 VS.NET 2003……
8、问题:在 web.config 中新建一个工程时没有<assemblies><add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
我手工添加后出现配置错误!!!
-------------------------------------------------------------------------
一、引言
在.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:\web\VenditionSystem\web.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 覆盖原来的程序……