01/06/12

[RISOLTO] Crystal report su Visualstudio 2010 errore 'CrystalDecisions.CrystalReports.Engine.ReportDocument' le possibili cause e la sua risoluzione

 

Molto spesso capita sviluppando applicazioni con Visualstudio 2010 o precedenti di inserire dei report sviluppati con SAP Crystal Report all’interno dell’applicazione.

 

L’errore preciso spesso è questo:

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

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

In ambiente di sviluppo funziona tutto correttamente ma poi quando andiamo a distribuire con ClickOnce la nostra applicazione, si verificano spesso degli strani errori sul client, legati soprattutto all’oggetto ReportDocument che solleva un’eccezione.

Questo problema può avere diverse possibili cause che vi vado ad elencare e con esse anche la relativa risoluzione.

  • Il report non è stato incluso nel manifesto di pubblicazione.
  • imageQuesto capita se sul report non sono stati impostati i parametri Copia sempre per Copia nella directory di Output e Contenuto per il parametro Build Action. In tal caso il report non appare tra i file dell’applicazione nella linguetta di pubblicazione e non possiamo mettergli l’opzione includi obbligatorio

 

  • Stiamo usando la nostra applicazione a 32 bit su un Pc a 64 bit

Questo capita perché pur includendo le Runtime di SAP Crystal Report nel nostro pacchetto ClickOnce, in fase di installazione sulla macchina a 64 bit vengono giustamente installate le Runtime a 64 bit di Crystal report, ma essendo la nostra applicazione a 32 è necessario che il setup installi la versione a 32 bit.

Per risolvere questo problema è necessario modificare il file product.xml sulla macchina di sviluppo prima della pubblicazione,che si trova nella cartella C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\Crystal Reports for .NET Framework 4.0 e rimuovere il commento dalla seguente voce.

<!-- <BypassIf Property="ProcessorArchitecture" Compare="ValueEqualTo" Value="AMD64"/> –>

C’è anche una nota di Sap a tale riguardo. La nota 1553968 - How to prevent the 64 bit msi installing on AMD64 processors when using Click-Once deployment.

  • Mancano le runtime del Crystal report nei prerequisiti del ClickOnce

image

Per distribuire correttamente il SAP Crystal Report per Visualstudio dalla nostra applicazione, è necessario indicare nella linguetta di pubblicazione nella sezione prerequisiti si a il Microsoft VisualStusio2010 Reportviewer, che è il contenitore del report che mettiamo sul form, sia le Runtime del SAP Crystal report.

  • Sul Pc client di destinazione mancano le Runtime di Visual C++ 2005 o 2010 a seconda dei casi

Queste Runtime sono un prerequisito del Crystal report anche se non lo trovate scritto da nessuna parte.

 

  • Installate manualmente sul PC Client le runtime di Crystal report che trovate su questa pagina

 

  • Create un pacchetto di installazione da Visualstudio 2010 includendo i merge modules di SAP Crysltal Report

imageSe nessuna delle soluzioni precedenti ha funzionato, vi consiglio di scaricarvi le merge modules di Sap Crystal Report da questo link, e creare con VisualStudio 2010 un nuovo progetto di tipo Setup. Cliccando col tasto destro sul nome del progetto scegliete add merge modules ed includete i pacchetti merge modules scaricati (a 32 o 64 bit a seconda dei casi) e create con una build il nuovo pacchetto di installazione msi che lancerete sul PC Client.

E’ possibile infatti che alcune chiavi di registro non vengano create correttamente sul client a causa di qualche policy di dominio. A tale proposito eseguite l’installazione come amministratore.

1 commento:

Cosa ne pensi?