我正在研究一个项目并遇到了一个问题。当我运行我的代码时,我收到此错误消息:
The type initializer for 'CrystalDecisions.Shared.SharedUtils' threw an exception
消息的标题是“TypeInitializerException未处理”。
我在这行代码中收到此错误:
this.crystalReportViewer = new CrystalDecisions.Windows.Forms.CrystalReportViewer();
我一直在寻找解决此问题的方法,但我一直遇到另一个问题。我发现的关于如何解决这个问题的一切都说平台目标应该改为x86。遵循该建议的所有评论总是积极的,因为它似乎适用于所有人,但它对我不起作用。我还尝试将平台目标作为x64。当我这样做时,我没有收到先前声明的错误,而是收到一条新错误:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
此消息的标题是“InvalidOperationException未处理”。 错误就在这一行:
db.Open();
当然,db被设置为新的OleDbConnection(连接)。 connection =一个Access db。
为什么我在平台目标是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:
答案 0 :(得分:7)
这看起来像是最初的问题:
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版本,如果它有不同版本的多个版本,或你刚刚错误地复制了程序集。这部分日志似乎也很相关:
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.
看起来这是检查正确性所需的文件。
答案 1 :(得分:4)
对某人有用:如果您可以选择执行此操作,请转到IIS并将应用程序池设置为仅32位应用程序。
这对我有用。
(当然,您的应用程序可以只在64位上运行。在这种情况下,我认为安装64位可重新发布的CrystalReports可以解决问题)
答案 2 :(得分:3)
您应该为.Net 4.0安装 SAP Crystal Reports运行时
答案 3 :(得分:1)
我有同样的问题。 32位应用程序在64位服务器上运行。我安装了64位运行时,抛出了上面的异常。安装32位版本后,所有工作都按预期工作。
答案 4 :(得分:0)
我为此错误所做的是安装CrystalReport Runtime。似乎缺少一些dll。查看此帖子,了解包SAP Crystal Reports runtime for .Net 4.0 (64-bit)。
答案 5 :(得分:0)
确保为您的环境安装了正确的版本,它尝试使用64位安装程序而不是32位安装程序,因为它们都可以正常安装,但是错误的安装程序会导致上述错误。
我遇到了完全相同的问题并安装了64位版本而不是为我修复了一些东西
答案 6 :(得分:0)
这个问题是水晶报告的驱动程序没有安装在客户端上,它们都在水晶报告主目录和子文件夹中 并命名为crystal.forms和crystal.shared以及水晶支持等等。
答案 7 :(得分:0)
我已解决,使用本地配置文件和管理员登录名(更改密码是否过期)来更改应用程序池标识。
症状相似。 我认为弹出 Log4net 是因为Crystal希望记录已经发生的错误。 我的项目中没有任何log4net,也没有dll文件。
我的项目是通过64位服务器上的AnyCpu编译的,并且我已经安装了两个CRRedist x86 x64。
我还尝试了在32位模式下运行而未做任何更改。
答案 8 :(得分:0)
我在Crystal Report中遇到了同样的问题,我只是更改了平台目标“ 任何CPU ”,正如您在下面的屏幕快照中所看到的。
答案 9 :(得分:0)
根据已安装的版本,如果仅安装了32位版本,则必须编译为x86;如果仅安装了64位版本,则必须在x64上编译,如果同时安装了两个版本,必须在任何CPU上编译。
如果您在任何CPU上进行编译,但在PC上具有32位版本,则会向您发送错误消息。
欢呼
答案 10 :(得分:0)
正如其他人已经意识到的那样:这可能是由于运行时不匹配(x86 / x64)而发生的。 在强制构建适用于x86架构的应用程序后,该错误已修复。
答案 11 :(得分:0)
您应该安装 Crystal Reports Runtime Engine for .Net Framework 和 适用于 Microsoft Visual Studio 的水晶报表。