VS2015开发的Crystal Report程序在Win7 64位出现程序集引用异常求助
我之前帮同事排查过一模一样的问题,给你整理几个经过验证的解决步骤,应该能搞定这个程序集引用异常:
严格匹配运行时版本
你用VS2015开发的,必须给Win7 64位机器安装Crystal Reports for Visual Studio 2015 64位 redistributable包,而且要和你开发环境里的CR补丁版本完全一致(比如SP13、SP14这类小版本也不能差)。别图省事装其他VS版本的CR运行时,版本不匹配是最常见的原因。修正项目的目标平台设置
打开VS2015里的项目属性→生成选项卡,把目标平台改成x64,同时取消勾选“首选32位”。很多人选“任何CPU”会导致程序在64位Win7上以32位模式运行,而你装的是64位运行时,自然会找不到对应程序集。手动复制程序集到部署目录
如果安装运行时后还是报错,试试手动把开发机器上的CR核心程序集复制到部署程序的exe同级目录。这些文件一般在C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win64_x64路径下,重点复制这几个:CrystalDecisions.CrystalReports.Engine.dllCrystalDecisions.Shared.dllCrystalDecisions.ReportSource.dllCrystalDecisions.Windows.Forms.dll
另外记得在VS项目里,把这些程序集的引用属性设置为**“复制本地 = True”**,这样发布时会自动把文件带过去,不用每次手动复制。
确认.NET Framework版本匹配
VS2015默认用的是.NET Framework 4.5及以上版本,Win7默认可能只装了4.0,你得给部署机器安装对应版本的.NET Framework(比如4.5.2或更高),确保和开发时用的版本完全一致。手动注册CR的COM组件
打开管理员权限的命令提示符,切换到CR运行时的win64_x64目录,执行以下命令注册关键组件:regsvr32 crpe32.dll regsvr32 crtslv.dll执行后会弹出注册成功的提示,这一步能解决部分因为COM组件未注册导致的程序集加载失败。
更新Win7系统补丁
确保Win7已经安装了Service Pack 1(SP1)以及最新的.NET Framework相关补丁,有些旧系统补丁缺失会影响.NET程序集的加载逻辑,补全补丁后很多奇怪的引用异常都会消失。
内容的提问来源于stack exchange,提问作者Your's P

