web-dev-qa-db-fra.com

L'initialiseur de type pour 'CrystalDecisions.CrystalReports.Engine.ReportDocument' a émis une exception

Je déploie sur mes clients une application de bureau qui utilise l'API Crystal Reports pour afficher et imprimer des formulaires. Je construis mon programme d'installation à l'aide d'InstallShield 2012. J'ai également inclus .NET 4.0 Framework avec tous les assemblys Crystal. J'ai 2 préoccupations (un peu liées):

1) Chaque fois que j'ai essayé d'exécuter l'application sur la machine cliente, j'obtiens le message d'erreur suivant:

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

Je n'ai aucune idée de ce que j'oublie ici. La CrystalDecisions.CrystalReports.Engine dll est correctement enregistrée dans le GAC, tout comme environ 10 autres assemblys Crystal. 

2) J'ai posé cette question sur les forums SAP , et on m'a dit que je devais inclure .NET 2.0 Framework avec .NET 4.0 Framework. J'ai essayé d'inclure le .NET 2.0 redistribuable dans mon package d'installation, mais celui-ci ne l'installe pas. Est-ce que l'installateur voit que j'ai 4.0 installé, alors il saute l'installation 2.0?

27
gwin003

Lorsqu'un constructeur statique lève une exception, elle est encapsulée dans une TypeInitializationException. Vous devez vérifier la propriété InnerException de l'objet exception pour voir l'exception réelle.

Dans un environnement de transfert/de production (où Visual Studio n'est pas installé), vous devez:

  1. Suivre/consigner l'exception et son exception InnerException (récursivement): Ajoutez un gestionnaire d'événements à l'événement AppDomain.UnhandledException et placez-y votre code de journalisation/suivi. Utilisez System.Diagnostics.Debug.WriteLine pour le traçage ou un enregistreur (log4net, ETW). DbgView (un outil Sysinternals) peut être utilisé pour afficher la trace Debug.WriteLine.
  2. Utilisez un débogueur de production (tel que WinDbg ou NTSD) pour diagnostiquer l'exception.
  3. Utilisez le débogage à distance de Visual Studio pour diagnostiquer l'exception (vous permettant de déboguer le code sur l'ordinateur cible à partir de votre propre ordinateur de développement).
11
M.A. Hanin

Voici ce qui a fonctionné pour moi:

Si vous effectuez l'installation sur un ordinateur 64 bits, assurez-vous que la cible de la plate-forme est "N'importe quel processeur" dans les propriétés de l'application sous l'onglet Construction, puis désélectionnez la case à cocher "Préférer 32 bits" si vous avez l'option. Crystal est très / sensible sur les assemblages 32/64 bits et fait des hypothèses assez contre-intuitives et très difficiles à résoudre.

14
Jeremy Holovacs

J'ai eu un message similaire et après plusieurs recherches en ligne et en faisant toutes les suggestions, rien n'a aidé. Finalement j'ai trouvé la solution. Dans mon serveur IIS, sous l'option d'avance du pool d'applications, il existe une option pour "Activer les applications 32 bits" - elle est passée de false à true et après le redémarrage du serveur IIS, mon programme a commencé à générer fichiers pdf.

6
shahk26

Vérifiez les propriétés de votre projet sur la cible de la plate-forme. Installez la version correspondante de Crystal Reports:

To x86 > CRforVS_redist_install_32bit
To x64 > CRforVS_redist_install_64bit
5
tyrodeveloper

L'exception interne du bogue indique Impossible de charger le fichier ou l'assembly 'log4net, version = 1.2.10.0, Culture = neutre, PublicKeyToken = 692fbea5521e1304'

Modification du paramètre AppPool False for Activer l'application 32 bits a résolu le problème.

2
user3192640

Pendant une journée entière, j’ai cherché en ligne et j’ai trouvé une solution par moi-même ... Le même scénario, l’application fonctionne très bien sur la machine du développeur, mais une fois déployé, il lance une exception. "." Crystaldecisions.crystalreports.engine.reportdocument jeté une exception " Détails: sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer la version 13.0.2000 est manquante.

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

Solution:

  1. j'ai mis x86 pour mon application, puis j'ai mis x64 pour mon application d'installation

  2. Condition préalable: i Placé le fichier d'exécution CR correspondant, CRRuntime_32bit_13_0_10.msi, CRRuntime_64bit_13_0_10.msi dans le répertoire suivant C:\Program Files (x86)\Microsoft SDK\Windows\v7.0A\Bootstrapper\Packages\Crystal Reports pour .NET Cadre 4.0

  3. Inclure le fichier de module de fusion dans le projet d'installation. Voici la version n’est pas grave, car j’utilise le logiciel 13.0.10, le module de fusion 13.0.16 Le fichier que j’inclus: CRRuntime_13_0_16.msm Ce fichier se trouve parmi les fichiers msm définis.

Lors de l'installation de ce module Merge, la dll nécessaire est ajoutée dans le répertoire suivant: C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports pour .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet

la version du fichier dll ne causera aucun problème.

Dans votre machine de développement, vous confirmez la même chose.

J'ai besoin de points de réputation, si cette réponse est utile, merci de le marquer comme utile (+1)

2
Pranesh Janarthanan

J'ai récemment eu une erreur similaire avec l'erreur log4net:

Impossible de charger le fichier ou l'assembly 'log4net, version = 1.2.10.0, Culture = neutre, PublicKeyToken = 692fbea5521e1304 '

C'était sur une machine 64 bits, mais je n'avais installé que le runtime 32bit

S'assurer que la construction ciblait uniquement x86 a fonctionné pour moi.

1
ScottC

Comme "M.A Hanin" l’a dit plus haut, cela peut être causé par un InnerException comme ceci:

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

et j'ai supprimé le dossier: C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g de mon ordinateur et cela a fonctionné pour moi!

1
Hussein PK

Ceci est dû au manque de capacité .... Si vous voyez l'exception interne, vous verrez ce message 

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

Donc, pour se débarrasser de cette exception. activer la fonction de reconnaissance vocale à partir du fichier manifeste.

J'ai eu le même problème, et cela a résolu mon problème. :)

0
Zia Ur Rahman

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument a lancé une exception

J'ai changé la plate-forme cible de x86 à Any CPU et le problème a été résolu.

0
Faheem

Je ne recevais pas l'erreur sur les ordinateurs 32 bits, mais sur 64 bits, j'ai donc changé la plate-forme cible de x86 à n'importe quel processeur et le problème a été résolu.

0
Rob King

Le truc pour moi était de changer la machine cible de «TOUT CPU» à «x64» ou peut-être dans votre cas «x86» en fonction de l'architecture de votre machine cible. J'essaierais ceci avant de passer à une solution plus complexe qui indique un problème plus complexe.

0
Alexander Zarate
  1. Téléchargez CR redist 2005 ou 2008 (votre outil) ou copiez-le à partir de C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports

  2. Télécharger c ++ redist 2005 ou 2008 (qui est votre outil)

  3. Installez les deux et redémarrez votre système

  4. Problème résolu.

0
user1970708

si vous utilisez Visual Studio, activez la propriété de construction "Préférer 32 bits" . voir image ci-dessous 

 enter image description here

0
Ravinda lakshan

J'ai eu un problème Le type Initializer .. mon fichier de configuration l'a résolu ..

j'ai oublié d'avoir un élément de connexion comme celui-ci
"connectionStrings" "/connectionStrings"maybe cela dépend de ce que vous avez fait dans un code. mon erreur est que je ne peux pas ouvrir une classe à cause de cet élément de connexion.

0
Antonio Cabilos