目录: 一、引言 二、概念与原理 三、问题 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 覆盖原来的程序…… 
|