Errore PublicKeyToken=692fbea5521e1304

venerdì 11 febbraio 2011 - 00.06
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  .NET 3.5  |  Windows 7  |  Windows XP  |  Visual Studio 2008  |  Crystal Reports XI

DomA Profilo | Expert

Salve a tutti,
ho costruito una piccola applicazione che gestisce crediti e incassi, però, ho un grosso problema quando vado ad installarla su un computer su cui non è installato visual studio. Sebbene sul computer su cui l'ho creata l'applicazione funziona correttamente (e non ci sono errori nel debug) quando la installo sul computer del cliente mi da il seguente errore all'apertura del form che visualizza il report (creato con crystal report XI R2):

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

L'errore viene generato nella sub che richiama il report.
L'applicazione è una windows form sviluppata in vb.net.

Cosa fare? Sono disperato
Grazie in anticipo
Domenico

freeteo Profilo | Guru

Ciao,
hai installato il runtime di Crystal dove hai distribuito l'applicazione?
Se fai una distribuzione tramite Setup o ClickOnce puoi impostare i "Prerequisiti" dell'applicazione stessa, così il pacchetto di setup stesso si arrangia a scaricarlo se non fosse installato sulla macchina...

Eventualmente se vuoi andare "a mano" puoi installare su quella macchina direttametne l'msi del runtime prendendolo dal tuo pc, cercando nelle directory che sono indicate qui:
http://blogs.dotnethell.it/freeteo/Runtime-di-ReportViewer-2008-disponibile__12668.aspx
nella parte finale "Per il runtime di Crystal Report..."

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Navaren Profilo | Newbie

Ciao Matteo,
Ho anche io un problema anologo e come da te consigliato ho impostato come prerequisito il runtime Crystal Report basic per Visual Studio 2008 (x86 x64).
Dopo aver installato l'applicazione sul server, accade che se richiamo il report dalla macchina sul quale è stato installato l'applicativo tutto funziona a meraviglia, quando questo viene richiamato da un qualsiasi client che punta sul pc che funge sa server mi visualizza questo messaggio di errore.

System.IO.FileNotFoundException: Impossibile caricare il file o l'assembly 'CrystalDecisions.Windows.Forms, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' o una delle relative dipendenze. Impossibile trovare il file specificato.
Nome file: 'CrystalDecisions.Windows.Forms, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304'

Ho provato anche ad installare su di un client il runtime di Crystal scaricato da internet, ma il risultato è sempre lo stesso. Sicuramente c'è quanch'cosa che mi sfugge, o che sbaglio, solo che non sò cosa .

freeteo Profilo | Guru

Ciao,
io proverei a fare qualche altra piccola analisi, ossia:
1) cercare se il file "'CrystalDecisions.Windows.Forms" è effettivamente presente nel sistema, magari usa un tool come "Total Commander" che fa la ricerca a tappeto su tutte le dir di tutto il disco, quindi ti trova le cose anche dentro a directory particolari come la "Assembly" che windows non ti visualizza normalmente (è la GAC del Framework)

2) verificato che il file c'è, quindi il runtime è andato su correttamente, prova a vedere se l'utente con cui gira l'applicazione è amministrator, se non lo è se puoi mettilo così escludiamo i problemi di permessi utente.Dopodichè se è quest'ultimo il problema, andiamo a capire che permessi servono all'utente con cui gira, perchè chiaramente metterlo "Administrator" è per fare la prova, non è una soluzione

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Navaren Profilo | Newbie

Ciao Matteo.
Innanzi tutto grazie per la tua risposta, ho allegato lo stamp video di C:\Windows\assembly il quale dimostra l'avvenuto caricamento del file 'CrystalDecisions.Windows.Forms, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' che non riesce a trovare. Del resto se non fosse presente non avrebbe dovuto funzionare (Come invece avviene) neanche quando il report viene richiamato dalla macchina sulla quale è stata installata l'applicazione, per cui ho scartato la prima ipotesi che mi hai consigliatodi verificare.
Per quanto riguarda la seconda ipotesi posso dire che il setup è stato eseguito con un profilo che ha i privilegi di amministratore.
Non sò se può essere utile nell'aiuto che mi stai offrendo, ...dopo aver installato l'applicazione ho condiviso la cartella (XP) Document and setting\NOME UTENTE\Impostazioni Locali\Apps\2.0 sotto la quale è stata generata l'applicazione dal setup, poi dal client che dovrà utilizzarlo sfoglio la cartella che ho condiviso e sul desktop creo un link.
Funziona tutto l'applicativo a partire DB MySQL Server! Prima di Crystal utilizzavo i consueti stumenti di reportistica che funzionavano bene, ma... che papere la loro realizzazione,così ho cominciato ad utilizzare Crystal ma sino a che le applicazioni non sono divenute cliet/server non mi sono mai accorto di questo errore.
Oltre al tuo aiuto sto smanettando su internet, ma al momento non sono ancora riuscito a trovare la soluzione .
Ciao !!!

freeteo Profilo | Guru

Ciao, e grazie per i dettagli.
Hai provato anche a copiare in qualche altra cartella tutti i file del programma e lanciarli da lì?

Perchè se non ho capito male hai l'esecuzione da percorso di rete, potrebbe essere un problema di permessi (un tempo si usava un tool "caspol" ma se non ricordo male adesso con il Fmw >= 3.5 non dovrebbe più essere necessario...)

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Navaren Profilo | Newbie

Ciao Matteo !
Dopo una pausa dedicata ad altre attività di sviluppo sono tornato al mio problema di sempre con Crytal Report
Seguendo il tuo ultimo consiglio ho copiato in una cartella condivisa tutti i files che il setup aveva generato, e per evitare problemi di autorizzazione ho dichiarato per la cartella condivisa Evryone come comproprietario, ma....... niente non è cambiato nulla e l'errore persiste
Per sfatare ogni dubbio su problemi di autorizzazione dal client mi sono collegato con un profilo che il server riconosce come amministratore ma non cambia nulla.
Per cui ricapitolando:
Se utilizzo l'applicazione richiamandola direttamente dal server su cui è installata, o dal notebook sul quale è stata sviluppata, non mi dà errori.
Se la richiamo da un qualsiasi client funziona tutto fatta eccezione per la parte di Crystal Report.
Sono certo che forse è una banalità, ma anche le banalità sono montagne quando ti sfugge la soluzione .
Ti invio in allegato gli stamps dei files che ho copiato nella cartella Prova con i permessi sopra descritti, forse potrebbero essere utili per l'aiuto che mi stai offrendo.
Grazie

freeteo Profilo | Guru

Ciao Navaren,
il file che mi hai mandato mi dice che hai installato l'applicazione tramite clickonce...giusto?
Hai messo nei prerequisiti il pacchetto Crystal? Magari digli di scaricarlo dal sito del produttore così ti dovrebbero scendere le ultime versioni (appropriate al tuo pacchetto chiaramente).

Ad ogni modo prima di tutto io proverei a vedere se nelle applicazioni installate c'è qualcosa che riguardi Crystal, in quel caso lo disinstallerei, insieme alla tua app, e poi proverei a reinstallare la tua app con clickonce, e mi assicurerei che il pacchetto di Crystal venga installato dal setup che parte...
Dopodichè vediamo di analizzare ancora, ma intanto almeno sappiamo che siamo partiti da una situazione "pulita"...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Navaren Profilo | Newbie

Ciao Matteo !
Grazie per avermi risposto, ho seguito i tuoi consigli ma non è cambiato nulla .
Per essere più preciso nelle indicazioni per la risoluzione del problema ho effettuato degli stamps a livello di:
1) Sviluppo (PC dal quale ho realizzato l'applicativo)
2) Server (Dove l'applicativo risiede)
3) Client (Da dove con un link viene richiamato)
Dovrebbero essere stamps abbastanza esaustivi, ho ipotizzato che potrebbe essere un problema di versione di Crystal (Vedi stamps), ma magari sto dicendo una stupidaggine, il fatto è che sono veramente confuso e anche un pò disperato, dovrebbe essere un'operazione abbastanza naturale inserire una stampa generata da Crystal, un pò come quando esporti nel tuo progetto MySQL Server o una tua DLL, e invece.......
Ma ovviamente sono io che sbaglio, solo..... che non sò dove !!!
Ti ringrazio molto per il tuo aiuto!!

freeteo Profilo | Guru

Ciao e grazie a te per tutte le info.
A quanto pare, il tuo client non ha installato il runtime di crystal perchè l'errore sembra proprio che non trovi (e quindi non riesca a caricare) la dll relativa di cui vedi il messaggio d'errore.
Forse non vanno bene i prerequisiti, non saprei...cmq ti chiedo allora di controllare anche questa dir nel client/server per capire se effettivamente il file c'è:
C:\Windows\assembly

E' una directory particolare e windows te la mostra come lista di file (a cui non riesci accedere) ma se vuoi puoi usare un tool come TotalCommander e dargli il path per accederci in modalità "normale" di esplora risorse...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Navaren Profilo | Newbie

Ciao Matteo, purtroppo ancora non ho risolto dopo 1.000 prove, x cui ho nuovamente allegato degli stamps nella speranza che mi possa dare una mano!
Come vedi per la pubblicazione del progetto uso, ed esporto la versione CR2008 10.5.3700.0 copiandola localmente (ho provato a pubblicare il progretto anche con copia localmente=False).
Se verifico sul server c:\windows\assembly, viene tutto regolarmente esportato con la versione corretta, tant'è vero che se come al solito lancio l'applicativo dal server CR funziona perfettamente.
Il problema nesce sempre quando richiedo la stampa da un client , allora mi dice bla.. bla... bla-- che non trova il file, come che se lancianto l'applicativo dal server, allora punti correttamente a c:\windows\assembly trovando le dll di CR, mentre lanciadolo dal client non ci riesca.
Una cosa che non capisco è xchè quando eseguo il setup di installazione (vedi 3° stamp) mi crei delle cartelle con il file CR in versione differente dalla 10.5.3700.0 !!
Ho provato anche ad eliminare quelle 4 cartelle ipotizzando che lanciando l'applicativo dal client trovasse prima questi file con versione differente e quindi desse l'errore, ma nulla è cambiato :(
Non si potrebbe prendere le dll di CR direttamente da assembly e copiarle nella cartella del mio applicativo x vedere se in quel modo riesce a trovarle?
Magari sto dicendo una fesseria, ma.... non sò + cos'altro fare !!

Navaren Profilo | Newbie

Ciao Matteo !
HO IN QUALCHE MODO RISOLTO, non è una soluzione che mi fà impazzire, ma funziona, e a beneficio della comunità rendo disponibile questa mezza soluzione.
In pratica come citavo nei miei precedenti post il problema nasce dal fatto che le classi CR che dopo il setup diverranno patrimonio dell'assembly del server vengono scaricate nella verione corretta, ma i client che dispongono solo di un link di collegamento all'applicazione non usano le assembly del server, e se pure le scarichi la versione non è quella con il quale è stata generata l'applicazione per cui alla richiesta di CR dà errore di versione non trovata.
Ho fatto una prova:
Ho eseguito il setup anche sul client, lui mi ha installatto le assembly corrette, poi ho disinstallato il programma (le assembly sono rimaste) e lo stesso link di collegamento dell'applicativo al server che prima andava in errore alla richiesta di CR, adesso funziona!
Certo... la soluzione che mi viene in mente in prima battuta (lo utilizzano anche altri applicativi client/server) è creare un programma di setup ad hoc da eseguire per le installazioni client e che in qualche modo potessero includere nell'assembly del client le classi CR con la versione corretta, anche perchè oltre a quelle dovrei anche anche includere il Connector/ODBC di MYSQL Server e relativo Data Source Name (Che utilizza sempre CR).
Non ho molta dimestichezza con cose di questo tipo, dovrò smanettare con pazienza su internet, a meno che non mi aiuti la community

Ciao!!

freeteo Profilo | Guru

>HO IN QUALCHE MODO RISOLTO, non è una soluzione che mi fà impazzire,
>ma funziona, e a beneficio della comunità rendo disponibile questa
>mezza soluzione.
ottimo, fai bene perchè è proprio questo lo spirito del forum, condivisione!



>....
>Non ho molta dimestichezza con cose di questo tipo, dovrò smanettare
>con pazienza su internet, a meno che non mi aiuti la community
guarda se devi fare delle operazioni "custom" durante i setup, ti consiglio questo post:
http://blogs.dotnethell.it/freeteo/Far-apparire-una-Form-.net-durante-il-deploy-con-Windows-Installer__15332.aspx
Come vedi è qualcosa di "artigianale", ma mi ha evitato parecchi problemi e mi ha fatto risparmiare un fiume di tempo...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5