.NET Framework 4.0中的Crystal Report

7
我们有一个使用Visual Studio 2010编写的WPF应用程序,使用.NET 3.5编译的8个项目。该应用程序使用Crystal Report,并针对Windows 7操作系统进行了定位。最近,由于某些第三方DLL依赖项需要.NET 4.0,因此将“启动项目”编译为.NET 4.0。在更改后并重新构建解决方案后,Crystal Report会抛出异常。问题发生在ReportClass的构造函数处。异常信息如下:The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception. 内部异常信息如下:Retrieving the COM class factory for component with CLSID {4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). 我之前没有使用过Crystal Report。这个问题的原因是什么呢?请注意,在.NET 3.5编译时不会出现此问题。 Crystal Report在启动项目中使用。

您需要将Crystal Reports DLL注册为COM对象吗? - zeencat
我认为你需要使用 .net 4.0 来构建所有的项目,目前还不确定原因。 - lex87
@zeencat:不确定你的意思。我没有在3.5中注册DLL文件。 - Donotalo
我只是想知道这是否是你的问题,因为我在使用另一个dll时遇到了类似的错误。这对我有用,但可能只是一种试探性的方法。http://msdn.microsoft.com/en-us/library/tzat5yw6(v=vs.71).aspx - zeencat
我在这里找到了一个解决方案。这修复了我的问题。 - Donotalo
这个回答解决了你的问题吗?检索具有CLSID {XXXX} 的组件的COM类工厂失败,原因是以下错误:80040154 - Khalid Bin Sarower
5个回答

15

很可能是X86/x64的问题。

尝试将您的应用程序编译为面向86平台的。


4
这个问题困扰了我2天,所有的解答都很相似,但最终对我来说是双重的。我在这里添加希望它能至少为某人节省一天时间。。
很多帖子都提到了这一点; 进入IIS ->应用程序池->右键单击应用程序池->转到高级设置->启用32位应用程序= True 请注意,在我的情况下,我是在64位机器上构建和部署的,所以我将True设置为False,然后它就行了。同样,这很简单,但不是我认为与之相关的事情,所以我调整后就忘记了。
另一个值得注意的地方是要确保在部署服务器上加载CRRuntime_xx.x.x.MSI。
感谢大家在这里提供的惊人信息,这让我度过了这一天的难关。

2
尽管赞赏是好的,但我认为你不应该把你的回答变成一封赞赏信。保持更加简洁明了。 - Gnqz

3

前往IIS -> 应用程序池 -> 在您的应用程序池上单击右键 -> 进入高级设置 -> 启用32位应用程序 = True


0

当您安装CR时,它应该在C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\crystalreportviewers13上安装一些文件(JS、html等等)。请检查此文件夹是否存在于您的电脑上。如果没有,我认为您需要将该文件夹从程序文件复制到此位置。


0

这些答案让我们找到了正确的位置,但在进行一些故障排除之前并没有成功。最终问题出现在我们的本地开发机器上,这些机器运行着Visual Studio 2019和IIS Express,并且涉及到32/64位问题。

在我们的情况下,问题是由于在Visual Studio设置中启用了“对网站和项目使用64位版本的IIS Express”的设置。我们在开发机器上使用32位版本的Crystal,因此我们必须取消选中此框才能使其正常工作。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接