2013-05-20 14 views
19

Ich stelle eine Desktopanwendung auf meinen Clients 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 mit allen Crystal Assemblies integriert. Ich habe 2 (irgendwie verwandt) betrifft:Der Typinitialisierer für 'CrystalDecisions.CrystalReports.Engine.ReportDocument' hat eine Ausnahme ausgelöst

1) Jedes Mal, wenn ich versuchte die Anwendung auf dem Client-Rechner laufen zu lassen, erhalte ich folgende Fehlermeldung:

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

ich keine Ahnung, was ich hier vergessen. Die DLL CrystalDecisions.CrystalReports.Engine wird ordnungsgemäß im GAC registriert, ebenso wie etwa 10 andere Crystal-Baugruppen.

2) I have asked this question on the SAP forums, und mir wurde gesagt, ich musste das .NET 2.0 Framework zusammen mit dem .NET 4.0 Framework enthalten. Ich habe versucht, .NET 2.0 redistributable in meinem Installationspaket einzubauen, aber das Installationsprogramm installiert es nicht. Sieht das Installationsprogramm, dass ich 4.0 installiert habe, also die 2.0-Installation überspringt?

Antwort

9

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

In einer Inszenierung/Produktionsumgebung (wo Sie Visual Studio nicht installiert ist), werden Sie brauchen entweder:

  1. Trace/Log die Ausnahme und die Innerexception (rekursiv): Event hinzufügen Handler zum AppDomain.UnhandledException Ereignis, und legen Sie Ihren Protokollierungs-/Tracing-Code dort. Verwenden Sie System.Diagnostics.Debug.WriteLine für die Verfolgung oder einen Logger (log4net, ETW). DbgView (ein Sysinternals-Tool) kann verwendet werden, um die Debug.WriteLine-Ablaufverfolgung anzuzeigen.
  2. Verwenden Sie einen Produktionsdebugger (z. B. WinDbg oder NTSD), um die Ausnahme zu diagnostizieren.
  3. Verwenden Sie Visual Studio Remote Debugging, um die Ausnahme zu diagnostizieren (wodurch Sie den Code auf dem Zielcomputer von Ihrem eigenen Entwicklungscomputer debuggen können).
+0

Danke, das brachte mich auf den richtigen Weg. Ich habe meine eigene Ausnahmeprotokollierung implementiert, aber ich habe die InnerExceptions nicht korrekt protokolliert. – gwin003

+0

Hey! Mann, das ist wegen Mangel an Fähigkeit .... Wenn Sie die Innere Ausnahme sehen, werden Sie diese Nachricht sehen "Zugriff verweigert. Zugriff auf Sprachfunktionalität erfordert ID_CAP_SPEECH_RECOGNITION im Manifest definiert werden." Also, um diese Ausnahme loszuwerden. Aktivieren Sie die Spracherkennung wie erwähnt. –

13

Hier ist, was für mich gearbeitet:

Wenn Sie auf einem 64-Bit-Maschine installieren, die Anwendungseigenschaften unter der Registerkarte Build stellen Sie sicher, haben „Any CPU“ als Plattform Ziel und abzuwählen die Aktivieren Sie das Kontrollkästchen für "32-Bit bevorzugen", wenn Sie die Option haben. Crystal ist sehr empfindliche 32/64-Bit-Assemblys, und macht einige ziemlich kontraintuitive Annahmen, die sehr schwierig zu beheben sind.

+0

Meine Lösung beinhaltete, dass ich nicht die richtige log4net-Assembly verwendete, die Crystal wollte. Ich benutzte log4net in meiner Anwendung, um meine eigenen Ausnahmen zu protokollieren, aber Crystal wollte eine Version von log4net, die ein anderes PublicKeyToken hatte. Nachdem ich die richtige Version in meinem Installer installiert hatte, funktionierte es. – gwin003

+1

Ich habe SAP-Dokumentation gesehen, die explizit angibt, um es auf 32 oder 64 Bit NOT AnyCpu zu setzen. –

0

Ich bekam nicht den Fehler auf 32-Bit-Maschinen, sondern war auf 64-Bit, so änderte ich die Zielplattform von x86 Any CPU und es das Problem gelöst.

0

Als „M. A. Hanin“, sagte oben, es durch eine InnerException wie dies verursacht wird:

"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 löschte den Ordner: mein Computer C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g aus und arbeitete für mich!

5

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

To x86 > CRforVS_redist_install_32bit 
To x64 > CRforVS_redist_install_64bit 
+3

Soll eine App mit diesem Namen installiert werden?Es ist schwer zu analysieren, was du geschrieben hast. Wenn du es aufklären könntest, wäre das großartig. – Lizz

0

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument eine Ausnahme warf.

Ich änderte die Zielplattform von x86 zu Any CPU und löste das Problem.

0

bekam ich ein Problem Die Typeninitialisierer .. meine Config-Datei beschlossen ..

i ein Verbindungselement wie diese
„connection“ haben vergessen zu „/ connection“ vielleicht ist es auf, was Sie hängt tat in einem Code. Mein Fehler ist, dass ich wegen dieses Verbindungselements keine Klasse öffnen kann.

5

Ich hatte ähnliche Nachricht und nach mehreren Suchen online und alle Vorschläge zu tun, half nichts. Endlich habe ich die Lösung gefunden. Auf meinem IIS-Server gibt es unter der Option "Erweiterter Anwendungspool" die Option "32-Bit-Anwendungen aktivieren", die von "falsch" in "wahr" geändert wurde, und nach dem Neustart des IIS-Servers hat Mein Programm mit dem Generieren von PDF-Dateien begonnen.

+0

Größen! Es funktioniert gut! –

-2

Ich konfrontiert das gleiche Problem. Die Zielplattform war in meinem Fall Any CPU. Aber die Checkbox "Prefer-32Bit" wurde aktiviert. Durch das Deaktivieren der Checkbox wurde das Problem behoben.

2

Für einen ganzen Tag suchte ich online und ich fand eine Lösung auf eigene Faust. Das gleiche Szenario, die Anwendung funktioniert gut in der Entwickler-Maschine, aber bei der Bereitstellung wirft es die Ausnahme "crystaldecisions.crystalreports.engine.reportdocument warf eine Ausnahme" Details: sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer Version 13.0.2000

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

Lösung:

  1. i gesetzt x86 für meine Anwendung, dann setze i x64 für meine Setup-Anwendung

  2. Voraussetzung: Ich legte die Unterstützung CR-Laufzeitdatei CRRuntime_32bit_13_0_10.msi, CRRuntime_64bit_13_0_10.msi im folgenden Verzeichnis C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ V7.0A \ Bootstrapper \ Packages \ Crystal Reports für .NET Framework 4.0

  3. Merge-Modul-Datei zum Setup-Projekt hinzufügen. Hier ist Version ist keine ernste Sache, weil ich 13.0.10 weiche, 13.0.16 merge Moduldatei Datei verwende ich: CRRuntime_13_0_16.msm Diese Datei wird eine unter den eingestellten MMS-Dateien gefunden.

Während dieses Merge-Modul Installation wird die notwendige DLL in dem folgenden Verzeichnis C hinzufügen: \ Program Files (x86) \ SAP Business \ Crystal Reports für .NET Framework 4.0 \ Common \ SAP Businessobjects Enterprise XI 4.0 \ win32_x86 \ dotnet

DLL-Dateiversion wird keine Probleme verursachen.

In Ihrem Entwickler-Rechner bestätigen Sie es gleich.

Ich brauche Rufpunkte wenn diese Antwort nützlich ist freundlich markiert es nützlich (+1)

2

Die innere Ausnahme von Bug sagt Datei oder Assembly ‚log4net laden kann, Version = 1.2.10.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304'

die AppPool Ändern Falsch für Einstellung aktivieren 32-Bit-Anwendung das Problem gelöst

0
  1. Herunterladen cr redist 2005 oder 2008 (die Ihr Werkzeug ist) oder von C: \ Programme \ Microsoft Visual Studio 8 \ SDK \ Bootstrap \ Packages \ v2.0 \ Crystal

  2. Herunterladen C++ redist 2005 oder 2008 (das ist Ihr Werkzeug)

  3. beide Installieren und starten Sie das System

  4. Problem gelöst.

0

Dies ist wegen des Mangels an Capability .... Wenn Sie die innere Ausnahme sehen Sie diese Meldung

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

So zu dieser Ausnahme loszuwerden sehen. Aktivieren Sie die Funktion zur Spracherkennung aus der Manifest-Datei.

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

1

Was für mich gearbeitet:

hatte ich einen ähnlichen Fehler vor kurzem mit dem log4net Fehler:

Could not load file or assembly 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'

Dies war auf 65bit 64-Bit-Maschine, aber ich würde nur installiert, um die Laufzeit 32bit .

Stellen Sie sicher, dass der Build nur für x86 Targeted arbeitete für mich.

+2

Ich möchte auch 65-Bit-Maschine !! Bitte sag mir woher bekomme ich es? :3 – Nevermore

0

Was war der Trick für mich war die Zielmaschine von "ANY CPU" auf "x64" oder vielleicht in Ihrem Fall "x86" abhängig von der Architektur Ihrer Zielmaschine zu ändern. Ich würde dies zuerst versuchen, bevor ich mich in eine komplexere Lösung bewege, die auf ein komplexeres Problem hinweist.