2013-05-20 30 views
19

Sto distribuendo un'applicazione desktop ai miei client che utilizza l'API di Crystal Reports per visualizzare e stampare moduli. Sto costruendo il mio programma di installazione utilizzando InstallShield 2012. Ho anche incluso .NET 4.0 Framework insieme a tutti gli assembly Crystal. Ho 2 (kinda correlati) riguarda:L'inizializzatore di tipo per 'CrystalDecisions.CrystalReports.Engine.ReportDocument' ha emesso un'eccezione

1) Ogni volta che ho provato a eseguire l'applicazione sul computer client, ottengo il seguente errore:

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

Non ho idea di quello che sto dimenticando qui. La dll CrystalDecisions.CrystalReports.Engine viene registrata correttamente nel GAC, come lo sono circa 10 altri assembly Crystal.

2) I have asked this question on the SAP forums, e mi è stato detto che avevo bisogno di includere .NET 2.0 Framework insieme a .NET 4.0 Framework. Ho provato a includere .NET 2.0 ridistribuibile nel mio pacchetto di installazione, ma il programma di installazione non lo installa. L'installatore vede che ho installato 4.0, quindi salta l'installazione 2.0?

risposta

9

Quando un costruttore statico genera un'eccezione, viene inserito all'interno di un TypeInitializationException. È necessario verificare la proprietà dell'oggetto di eccezione per visualizzare l'eccezione effettiva.

In un ambiente di staging/produzione (in cui non si dispone di Visual Studio installato), avrete bisogno di uno:

  1. Trace/Log l'eccezione e il suo InnerException (ricorsivamente): Aggiungi un evento gestore dell'evento AppDomain.UnhandledException e inserire lì il proprio codice di registrazione/tracciamento. Utilizzare System.Diagnostics.Debug.WriteLine per la traccia o un logger (log4net, ETW). DbgView (uno strumento Sysinternals) può essere utilizzato per visualizzare la traccia Debug.WriteLine.
  2. Utilizzare un debugger di produzione (come WinDbg o NTSD) per diagnosticare l'eccezione.
  3. Utilizzare Debug remoto di Visual Studio per diagnosticare l'eccezione (che consente di eseguire il debug del codice sul computer di destinazione dal proprio computer di sviluppo).
+0

Grazie, questo mi ha messo sulla strada giusta. Ho implementato la mia registrazione delle eccezioni, ma non stavo registrando correttamente le InnerExceptions. – gwin003

+0

Ehi! uomo, questo è a causa della mancanza di capacità .... Se si vede l'eccezione interna vedrete questo messaggio "Accesso negato L'accesso alla funzionalità vocale richiede ID_CAP_SPEECH_RECOGNITION da definire nel manifest." Quindi per sbarazzarsi di questa eccezione. attivare la capacità di riconoscimento vocale come menzionato. –

13

Ecco cosa ha funzionato per me:

Se si esegue l'installazione su una macchina a 64 bit, assicurarsi che le proprietà di applicazione sotto la scheda Costruisci hanno "Qualsiasi CPU" come l'obiettivo della piattaforma, e deselezionare la seleziona la casella "Preferisci 32 bit" se hai l'opzione. Crystal è molto un po 'approssimativo su assiemi 32/64 bit e fa alcune supposizioni piuttosto controintuitive che sono molto difficili da risolvere.

+0

La mia soluzione mi ha portato a non utilizzare l'assembly log4net corretto richiesto da Crystal. Stavo usando log4net nella mia applicazione per registrare le mie eccezioni, ma Crystal voleva una versione di log4net con un PublicKeyToken diverso. Una volta inclusa la versione corretta nel mio programma di installazione, ha funzionato. – gwin003

+1

Ho visto documentazione SAP che specifica esplicitamente di impostarla su AnyCpu a 32 o 64 bit NOT. –

0

Non ricevevo l'errore su macchine a 32 bit ma era su 64 bit, quindi ho cambiato la piattaforma di destinazione da x86 a qualsiasi CPU e ha risolto il problema.

0

come "M.A. Hanin" detto sopra, può causato da un InnerException come questo:

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

e ho cancellato la cartella: C:\Users\Pourakbar.h\AppData\Local\Accounting\Accounting.vshost.exe_Url_a4h1gnabohiu4wgiejk0d21rc2kbwr4g dal mio computer e che ha funzionato per me!

5

Verificare le proprietà del proprio progetto sulla destinazione della piattaforma.Installare la versione corrispondente di Crystal Reports:

To x86 > CRforVS_redist_install_32bit 
To x64 > CRforVS_redist_install_64bit 
+3

Stai dicendo che dovrebbe essere installata un'app con quel nome?Hai difficoltà a analizzare ciò che hai scritto. Se potessi chiarirlo, sarebbe fantastico. – Lizz

0

The type initializer for CrystalDecisions.CrystalReports.Engine.ReportDocument ha generato un'eccezione.

Ho cambiato la piattaforma di destinazione da x86 a Any CPU e ha risolto il problema.

0

Ho un problema Il tipo Initializer .. il mio file di configurazione risolto esso ..

ho dimenticato di avere un elemento di collegamento come questo
"connectionStrings" "/" connectionStrings forse dipende da quello che fatto in un codice. il mio errore è che non posso aprire una classe a causa di questo elemento di connessione.

5

Avevo un messaggio simile e dopo varie ricerche online e facendo tutti i suggerimenti, nulla ha aiutato. Finalmente ho trovato la soluzione. Nel mio server IIS, sotto l'opzione di avanzamento del pool di applicazioni, esiste un'opzione per "Abilita applicazioni a 32 bit" - che è stata modificata da false a true e dopo aver riavviato il server IIS, il mio programma ha iniziato a generare file pdf.

+0

Grandi! Funziona bene! –

-2

Ho affrontato lo stesso problema. La piattaforma di destinazione era Any CPU nel mio caso. Ma la casella di controllo "Prefer-32Bit" è stata selezionata. Deselezionando la stessa cosa è stato risolto il problema.

2

Per un giorno intero ho cercato online e ho trovato una soluzione per conto mio. Lo stesso scenario, l'applicazione funziona bene nel computer dello sviluppatore, ma quando viene distribuito lancia l'eccezione "crystaldecisions.crystalreports.engine.reportdocument ha generato un'eccezione" Dettagli: sys.io.filenotfoundexcep crystaldecisions.reportappserver.commlayer versione 13.0.2000 manca

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

Soluzione:

  1. ho impostato x86 per la mia domanda, quindi ho impostato x64 per la mia applicazione di configurazione

  2. Premessa: ho messo il file CR runtime di supporto CRRuntime_32bit_13_0_10.msi, CRRuntime_64bit_13_0_10.msi nella seguente directory C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ Bootstrapper \ Packages \ Crystal Reports per .NET Framework 4.0

  3. Includi il file del modulo unione nel progetto di installazione. Ecco la versione non è una cosa seria perché uso 13.0.10 soft, file modulo 13.0.16 merge File ho incluso: CRRuntime_13_0_16.msm Questo file si trova uno tra i file msm impostati.

Durante l'installazione di questo modulo di unione aggiungerà il dll necessaria nei seguenti dir C: \ Program Files (x86) \ SAP BusinessObjects \ Crystal Reports per .NET Framework 4.0 \ Common \ SAP BusinessObjects Enterprise XI 4.0 \ win32_x86 \ dotnet

versione file dll non causerà alcun problema.

Nella macchina per sviluppatori si conferma lo stesso.

ho bisogno di punti reputazione, se questa risposta è utile gentilmente segnare utile (+1)

2

L'eccezione interna di bug dice Impossibile caricare il file o l'assembly 'log4net, Version = 1.2.10.0, Cultura = neutro PublicKeyToken = 692fbea5521e1304'

Modifica della AppPool impostazione false per Enable 32-bit Application risolto il problema

0
  1. Scarica cr Redist 2005 o 2008 (che è il vostro strumento) oppure copiare da C: \ Programmi \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ BootStrapper \ Packages \ CrystalReports

  2. Scarica C++ redist 2005 o 2008 (che è il vostro strumento)

  3. installare sia e riavviare il sistema

  4. Problema risolto.

0

Questo è a causa della mancanza di capacità .... Se si vede l'eccezione interna si vedrà questo messaggio

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

Così per sbarazzarsi di questa eccezione. attivare la capacità di Riconoscimento vocale dal file Manifest.

Ho avuto lo stesso problema e ho risolto il mio problema. :)

1

Quello che ha funzionato per me:

ho avuto un errore simile di recente con l'errore log4net:

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

Questo era 65bit computer a 64 bit, ma mi piacerebbe installato solo il runtime 32bit .

Accertarsi che la build avesse come target solo x86 ha funzionato per me.

+2

Anche io voglio una macchina a 65 bit !! Per favore, dimmi da dove posso averlo? : 3 – Nevermore

0

Qual è stato il trucco per me è stato quello di cambiare la macchina di destinazione da "QUALSIASI CPU" a "x64" o forse nel tuo caso "x86" a seconda dell'architettura della macchina di destinazione. Vorrei provare questo prima di passare a una soluzione più complessa che indica un problema più complesso.

Problemi correlati