VS2010中的水晶报表是单独安装的,安装成功后,会在VS的工具栏中出现【报表设计】一栏,里面有3个控件,当把这3个控件任意一个拖拽到页面上时,控件会报错,显示“未将对象引用设置到对象实例”,运行页面,则会出现如下提示“
CS0433: 类型“CrystalDecisions.Web.CrystalReportViewer”同时存在于“c:\Windows\assembly\GAC_MSIL\CrystalDecisions.Web\13.0.2000.0__692fbea5521e1304\CrystalDecisions.Web.dll”和
“c:\Windows\assembly\GAC_MSIL\CrystalDecisions.Web\10.5.3700.0__692fbea5521e1304\CrystalDecisions.Web.dll”中
这是因为VS2010中水晶报表V13与VS2008中水晶报表V10版本冲突,导致程序在编译时无法正确定位到正确版本的DLL文件,在VS2010中,所有的DLL文件,都使用V13,具体解决方法如下:
(1)先检查web.config文件中关于程序集的引用,是否如下,是V13
<
assemblies
>
<
add
assembly
="CrystalDecisions.CrystalReports.Engine, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
/>
<
add
assembly
="CrystalDecisions.ReportSource, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
/>
<
add
assembly
="CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
/>
<
add
assembly
="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
/>
<
add
assembly
="CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
/>
</
assemblies
>
(2)在项目根目录下添加Bin文件夹,将C:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet下的以下5个DLL文件复制到Bin文件夹下,
CrystalDecisions.CrystalReports.Engine.dll
CrystalDecisions.ReportSource.dll
CrystalDecisions.Shared.dll
CrystalDecisions.Web.dll
CrystalDecisions.Windows.Forms.dll
(3)最后将工具栏中,报表设计栏目下用到的控件拖拽到页面中,切换到HTML,将
<%
@ Register assembly
=
"
CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304
"
namespace
=
"
CrystalDecisions.Web
"
tagprefix
=
"
CR
"
%>
改成
<%
@ Register assembly
=
"
CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304
"
namespace
=
"
CrystalDecisions.Web
"
tagprefix
=
"
CR
"
%>
,控件就能够正常使用了