webentwicklung-frage-antwort-db.com.de

Der Typinitialisierer für 'CrystalDecisions.CrystalReports.Engine.ReportDocument' hat eine Ausnahme ausgelöst

Ich stelle eine Desktopanwendung für meine Kunden bereit, die die Crystal Reports-API zum Anzeigen und Drucken von Formularen verwendet. Ich baue mein Installationsprogramm mit InstallShield 2012. Ich habe auch das .NET 4.0 Framework zusammen mit allen Crystal-Assemblys hinzugefügt. Ich habe zwei (irgendwie verwandte) Bedenken:

1) Bei jedem Versuch, die Anwendung auf dem Client-Computer auszuführen, erhalte ich die folgende Fehlermeldung:

The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' 
      threw an exception.

Ich habe keine Ahnung, was ich hier vergesse. Die CrystalDecisions.CrystalReports.Engine-dll wird ebenso wie etwa 10 andere Crystal-Assemblys korrekt im GAC registriert. 

2) Ich habe diese Frage in den SAP-Foren gestellt und mir wurde gesagt, ich müsse das .NET 2.0 Framework zusammen mit dem .NET 4.0 Framework einbinden. Ich habe versucht, die umverteilbare .NET 2.0-Datei in mein Installationspaket aufzunehmen, aber das Installationsprogramm installiert es nicht. Stellt das Installationsprogramm fest, dass ich 4.0 installiert habe, sodass die 2.0-Installation übersprungen wird?

27
gwin003

Wenn ein statischer Konstruktor eine Ausnahme auslöst, wird er in eine TypeInitializationException eingeschlossen. Sie müssen die InnerException-Eigenschaft des Ausnahmeobjekts überprüfen, um die tatsächliche Ausnahme anzuzeigen.

In einer Staging-/Produktionsumgebung (in der Visual Studio nicht installiert ist) müssen Sie entweder

  1. Verfolgung/Protokollierung der Ausnahme und ihrer InnerException (rekursiv): Fügen Sie dem Ereignis AppDomain.UnhandledException einen Ereignishandler hinzu, und fügen Sie Ihren Protokollierungs-/Ablaufverfolgungscode dort ein. Verwenden Sie System.Diagnostics.Debug.WriteLine für die Protokollierung oder einen Logger (log4net, ETW). DbgView (ein Sysinternals-Tool) kann zum Anzeigen der Debug.WriteLine-Ablaufverfolgung verwendet werden.
  2. Verwenden Sie einen Produktions-Debugger (z. B. WinDbg oder NTSD), um die Ausnahme zu diagnostizieren.
  3. Verwenden Sie das Remote-Debugging von Visual Studio, um die Ausnahme zu diagnostizieren (damit Sie den Code auf dem Zielcomputer von Ihrem eigenen Entwicklungscomputer aus debuggen können).
11
M.A. Hanin

Folgendes hat für mich funktioniert:

Wenn Sie auf einem 64-Bit-Computer installieren, stellen Sie sicher, dass für die Anwendungseigenschaften auf der Registerkarte "Erstellen" "Any CPU" als Plattformziel angegeben ist. Deaktivieren Sie das Kontrollkästchen "32 Bit bevorzugen", wenn Sie die Option haben. Crystal ist sehr sehr anfällig für 32/64-Bit-Assemblies und macht einige ziemlich eingängige Annahmen, die sehr schwer zu beheben sind.

14
Jeremy Holovacs

Ich hatte eine ähnliche Nachricht und nach mehreren Online-Suchvorgängen und bei allen Vorschlägen half nichts. Endlich habe ich die Lösung gefunden. Auf meinem IIS Server gibt es unter der erweiterten Anwendungspooloption eine Option für "Enable 32-Bit Applications" (Enable 32-Bit Applications) - die von false in true geändert wurde und nach dem Neustart IIS Server. Mein Programm hat mit der Erzeugung von PDF-Dateien begonnen.

6
shahk26

Überprüfen Sie die Eigenschaften Ihres Projekts im Plattformziel. Installieren Sie die entsprechende Version von Crystal Reports:

To x86 > CRforVS_redist_install_32bit
To x64 > CRforVS_redist_install_64bit
5
tyrodeveloper

Die innere Ausnahme des Fehlers sagt Datei oder Assembly 'log4net, Version = 1.2.10.0, Kultur = neutral, PublicKeyToken = 692fbea5521e1304' konnte nicht geladen werden. '

Ändern der AppPool-Einstellung False for 32-Bit-Anwendung aktivieren Problem gelöst

2
user3192640

Für einen ganzen Tag habe ich online gesucht und eine Lösung gefunden, die ich selbst gefunden habe. Das gleiche Szenario, die Anwendung funktioniert gut in der Entwicklungsmaschine, aber wenn sie eingesetzt wird, wird die Ausnahme ausgelöst "Crystaldecisions.crystalreports.engine.reportdocument warf eine Ausnahme " Details: sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer Version 13.0.2000 fehlt

Meine IDE: MS VS 2010 Ultimate, CR V13.0.10

Lösung:

  1. ich setze x86 für meine Anwendung und dann x64 für meine Setupanwendung

  2. Voraussetzung: i Die unterstützende CR-Laufzeitdatei CRRuntime_32bit_13_0_10.msi, CRRuntime_64bit_13_0_10.msi wurde in folgendem Verzeichnis abgelegt:.. C:\Programme (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\Crystal Reports für .NET Framework 4.0

  3. Fügen Sie die Mergemoduldatei in das Setup-Projekt ein. Hier ist Version keine ernste Sache, da ich 13.0.10 soft, 13.0.16 Merge-Modul-Datei Verwende. Die Datei enthielt: CRRuntime_13_0_16.msm Diese Datei wird unter den eingestellten msm-Dateien gefunden.

Während der Installation dieses Merge-Moduls wird die erforderliche DLL im folgenden Verzeichnis hinzugefügt:. C:\Programme (x86)\SAP BusinessObjects\Crystal Reports für .NET Framework 4.0\Common\SAP BusinessObjects XI 4.0\win32_x86\dotnet

die DLL-Dateiversion verursacht keine Probleme.

In Ihrem Entwicklergerät bestätigen Sie es gleich.

Ich brauche Reputationspunkte, wenn diese Antwort nützlich ist, bitte als nützlich markieren (+1)

2

Ich hatte kürzlich einen ähnlichen Fehler mit dem Fehler log4net:

Datei oder Assembly 'log4net, Version = 1.2.10.0, .__ konnte nicht geladen werden. Kultur = neutral, PublicKeyToken = 692fbea5521e1304 '

Dies war auf einem 64-Bit-Computer, aber ich hatte nur die 32bit-Laufzeitumgebung installiert. 

Sicherstellen, dass der Build nur auf x86 ausgerichtet war, funktionierte für mich.

1
ScottC

Wie "M.A. Hanin" oben sagte, kann dies durch eine InnerException wie folgt verursacht werden:

"Unrecognized configuration section userSettings. (C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g\1.0.0.0\user.config line 3)"

und ich habe den Ordner: C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g von meinem Computer gelöscht und das hat für mich funktioniert!

1
Hussein PK

Dies ist auf mangelnde Fähigkeit zurückzuführen. Wenn Sie die innere Ausnahme sehen, wird diese Meldung angezeigt 

"Access is denied.
Access to speech functionality requires ID_CAP_SPEECH_RECOGNITION to be defined in the manifest."

Also, um diese Ausnahme loszuwerden. Aktivieren Sie die Fähigkeit zur Spracherkennung aus der Manifest-Datei.

Ich hatte das gleiche Problem und es löste mein Problem. :)

0
Zia Ur Rahman

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument hat eine Ausnahme ausgelöst

Ich habe die Zielplattform von x86 in Any CPU geändert und das Problem behoben.

0
Faheem

Ich habe den Fehler auf 32-Bit-Computern nicht erhalten, aber auf 64-Bit. Daher habe ich die Zielplattform von x86 in Any CPU geändert und das Problem behoben.

0
Rob King

Der Trick für mich war, den Zielcomputer von "ANY CPU" in "x64" oder in Ihrem Fall "x86" zu ändern, je nach Architektur Ihres Zielcomputers. Ich würde dies zuerst versuchen, bevor ich zu einer komplexeren Lösung komme, die auf ein komplexeres Problem hinweist.

0
  1. Laden Sie cr redist 2005 oder 2008 (das ist Ihr Tool) herunter oder kopieren Sie es von C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports

  2. Laden Sie c ++ redist 2005 oder 2008 herunter (dies ist Ihr Tool)

  3. Installieren Sie beide und starten Sie Ihr System neu

  4. Problem gelöst.

0
user1970708

wenn Sie Visual Studio verwenden, aktivieren Sie die Build-Eigenschaft "Prefer 32-Bit" . Siehe Abbildung unten. 

 enter image description here

0
Ravinda lakshan

Ich habe ein Problem. Der Typ Initializer .. meine Konfigurationsdatei hat es gelöst.

ich habe vergessen, ein solches Verbindungselement zu haben
"Verbindungszeichenfolgen" "/connectionStrings" kann davon abhängen, was Sie in einem Code gemacht haben. Mein Fehler ist, ich kann eine Klasse wegen dieses Verbindungselements nicht öffnen.

0
Antonio Cabilos