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?
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:
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.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.
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.
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
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.
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:
j'ai mis x86 pour mon application, puis j'ai mis x64 pour mon application d'installation
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
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)
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.
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!
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. :)
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.
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.
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.
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
Télécharger c ++ redist 2005 ou 2008 (qui est votre outil)
Installez les deux et redémarrez votre système
Problème résolu.
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.