7

我正在做一个项目并且遇到了问题。当我运行我的代码时,我收到此错误消息:

The type initializer for 'CrystalDecisions.Shared.SharedUtils' threw an exception

消息的标题是“TypeInitializerException was unhandled”。

我在这行代码中收到此错误:

this.crystalReportViewer = new CrystalDecisions.Windows.Forms.CrystalReportViewer();

我一直在寻找解决此问题的方法,但我一直遇到另一个问题。我找到的有关如何解决此问题的所有信息都表明平台目标应更改为 x86。遵循该建议的所有评论总是积极的,因为它似乎对每个人都有效,但对我不起作用。我还尝试将平台目标设为 x64。当我这样做时,我没有收到前面提到的错误,而是收到一个新错误,内容如下:

The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.

消息的标题是“InvalidOperationException was unhandled”。错误就在这一行:

db.Open();

db,当然,被设置为一个新的 OleDbConnection(connection)。连接 = 一个访问数据库。

为什么当平台目标是 x86 时收到第一个错误而不是第二个错误,如果平台目标是 x64,反之亦然?

堆栈跟踪:

System.TypeInitializationException was unhandled
  Message=The type initializer for 'CrystalDecisions.Shared.SharedUtils' threw an exception.
  Source=CrystalDecisions.Shared
  TypeName=CrystalDecisions.Shared.SharedUtils
  StackTrace:
       at CrystalDecisions.Shared.SharedUtils.get_CurrentControl()
       at CrystalDecisions.Shared.SharedUtils.GetEffectiveCulture()
       at CrystalDecisions.Shared.LocaleManager..ctor()
       at CrystalDecisions.Windows.Forms.CrystalReportViewer.InitReportViewer()
       at CrystalDecisions.Windows.Forms.CrystalReportViewer..ctor()
       at Client_Manager.ReportViewer.InitializeComponent() in C:\Users\Will\Desktop\Client_Manager\SyndicateII\ReportViewer.Designer.cs:line 31
       at Client_Manager.ReportViewer..ctor() in C:\Users\Will\Desktop\Client_Manager\SyndicateII\ReportViewer.cs:line 27
       at Client_Manager.Form1..ctor() in C:\Users\Will\Desktop\Client_Manager\SyndicateII\Form1.cs:line 174
       at Client_Manager.Program.Main() in C:\Users\Will\Desktop\Client_Manager\SyndicateII\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.BadImageFormatException
       Message=Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. An attempt was made to load a program with an incorrect format.
       Source=CrystalDecisions.Shared
       FileName=log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304
       FusionLog==== Pre-bind state information ===
LOG: User = Will-PC\Will
LOG: DisplayName = log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304
 (Fully-specified)
LOG: Appbase = file:///C:/Users/Will/Desktop/Client_Manager/SyndicateII/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : CrystalDecisions.Shared, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Will\Desktop\Client_Manager\SyndicateII\bin\Debug\Client_Manager.vshost.exe.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304
LOG: Attempting download of new URL file:///C:/Users/Will/Desktop/Client_Manager/SyndicateII/bin/Debug/log4net.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

       StackTrace:
            at CrystalDecisions.Shared.SharedUtils..cctor()
       InnerException: 
4

12 回答 12

8

这看起来像原来的问题:

InnerException: System.BadImageFormatException
   Message=Could not load file or assembly 'log4net, Version=1.2.10.0,
        Culture=neutral, PublicKeyToken=692fbea5521e1304'
   or one of its dependencies. An attempt was made to load a program
   with an incorrect format.

因此,如果 log4net 具有用于不同架构的多个版本您可能使用了错误版本的 log4net,或者您只是错误地复制了程序集。这部分日志似乎也很相关:

LOG: Attempting download of new URL
file:///C:/Users/Will/Desktop/Client_Manager/SyndicateII/bin/Debug/log4net.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

看起来这是您需要检查正确性的文件。

于 2012-09-11T17:38:32.313 回答
5

它可能对某人有用:如果您可以选择这样做,请转到 IIS 并将应用程序池设置为仅 32 位应用程序。

这对我来说是个窍门。

(当然,您的应用程序可以只在 64 位上运行。在这种情况下,我认为安装 CrystalReports 的 64 位可再发行组件应该可以解决问题)

于 2013-03-21T10:58:54.473 回答
4

您应该为 .Net 4.0 安装SAP Crystal Reports 运行时

于 2014-03-04T16:46:27.447 回答
3

我遇到过同样的问题。在 64 位服务器上运行的 32 位应用程序。我已经安装了 64 位运行时并且抛出了上述异常。安装 32 位版本后,一切都按预期工作。

于 2015-09-07T23:34:03.103 回答
0

我为这个错误所做的是安装 CrystalReport Runtime。它似乎缺少一些 dll。查看此帖子以获取适用于 .Net 4.0 (64-bit) 的 SAP Crystal Reports 运行时包。

于 2014-08-29T23:58:33.267 回答
0

确保为您的环境安装了正确的版本,它尝试使用 64 位安装程序而不是 32 位安装程序,因为它们都可以正常安装,但错误的安装程序会导致上述错误。

我遇到了完全相同的问题并安装了 64 位版本而不是为我解决了问题

于 2014-10-08T15:22:17.910 回答
0

我在水晶报告中遇到了同样的问题,我只是更改了平台目标“任何 CPU ”,如下面的屏幕截图所示。 在此处输入图像描述

于 2019-01-20T06:23:44.530 回答
0

您应该安装适用于 .Net Framework 的 Crystal Reports 运行时引擎和适用于 Microsoft Visual Studio 的 Crystal Reports。

于 2021-02-25T21:27:36.353 回答
0

我解决了更改应用程序池身份的问题,使用本地配置文件和管理员登录(看看密码是否过期)。

症状相似。我认为Log4net弹出是因为 Crystal 想要记录已经发生的错误。我的项目中没有任何 log4net,也没有 dll 文件。

我的项目是在 64 位服务器上使用 AnyCpu 编译的,并且我已经安装了 CRRedist x86 x64。

我也尝试在 32 位模式下运行而不做任何更改。

于 2018-12-09T19:23:43.380 回答
0

根据您安装的版本,如果您只安装了 32 位版本,则必须编译到 x86,或者如果您只安装了 64 位版本,则必须在 x64 上编译,如果您同时安装了两个版本,则必须在 x64 上编译任何CPU。

如果你在 anycpu 上编译,但在 pc 上你有 32 位版本,它会向你发送一个错误。

干杯

于 2020-04-07T18:31:38.067 回答
0

正如其他人已经发现的那样:这可能是由于运行时不匹配(x86 / x64)而发生的。在为 x86 架构强制构建我的应用程序后,错误已修复。

于 2020-04-08T10:00:40.100 回答
0

这个问题是水晶报表的驱动程序没有安装在客户端,它们在水晶报表的主目录和子文件夹中,命名为水晶.forms和水晶.shared和水晶支持等

于 2016-01-03T03:45:18.780 回答