本文内容
- 不能引用 Crystal Reporter 的相关程序集
- 错误分析
- 解决方案
不能引用 Crystal Reporter 的相关程序集
最近重做了一次系统,因此,之前安装的 Crystal Reporter 被格掉了。重新装完系统,VS 和 Crystal Reporter,并且添加了现有的解决方案后,Crystal Reporter 的相关引用找不到了。如下图所示:
图 1 找不到类型或命名空间名称 "CrystalDecisions"
其实,对于一般程序集,或是简单三方程序集来说,不是很难解决,删除再引用一次就行。但对于大一点的三方控件,往往没那么容易。至少要简单了解一下这个三方控件是如何设计的,建立的基础是什么。
这样的问题,说起来不难,但头一次遇到时,往往花很多时间才解决。
错误分析
下图是正常情况的引用。但是当程序集没有找到或出问题后,会在前面出现一个“叹号”。
图 2 正常情况的引用
于是,右键点击项目,选择“添加引用”,但是在 ".NET" 页完全看不到 Crystal Reporter 的相关引用。".NET" 页是 VS 在 GAC 能看到的所有程序集,看不到,意味着 Crystal Reporter 的程序集不在 GAC 里。这不大可能。
在操作系统的“控制面板”里查看 .NET framework 配置,却能看到 Crystal Reporter 的所有引用。又看了 C:\WINDOWS\assembly,Crystal Reporter 的所有程序集也都有,但就在 。".NET" 页就是看不到。
尝试把 CrystalDecisions.Web.dll 添加到工具箱。打算把 Crystal Reporter 控件拖到页面上,相关引用就会自动添加到项目。但不行。不但不行,连 Crystal Reporter 的版本都不对。之前,在 Web.config 文件的 "assembly" 节使用的 Crystal Reporter 相关程序集的版本是 10.5.3700,但是这么干后,却添加了另外的 10.0.3300 版本。
再次查看 C:\WINDOWS\assembly 目录,发现 Crystal Reporter 的所有程序集都是 10.0.3300。那我之前用的 10.5.3700 版本哪去了?
版本都不对,直接引用的话,就更不行。就算版本对,对于像 Crystal Reporter 这样的三方程序,可能性不大。程序集有太多依赖。
但修复 Crystal Reporter 和 VS,可还是不行。(其实,解决方法就在 VS 里,只是之前没注意到。)
解决方案
当第三次安装 VS 时,发现选项页里有关于 Crystal Reporter 的选项,细看叫 "Crystal Reporter Basic for Visual Studio 2008",如下图所示。注意到其中的词 "Basic",意识到类似于为了某个功能提供的基础框架。于是,把它们都勾上,第一次初次安装没勾。第二次是修复安装,没机会勾。
图 3 VS 2008 选项页
安装完成后,一切就正常了。
事实证明,细节决定一切,有句话:“魔鬼的魅力在于细节。”平时多思考,多注意细节没坏处。