2012-04-03 49 views
19

Ho esaminato domande simili su SO, ma per quanto posso dire non corrisponde assolutamente al mio problema.Impossibile caricare il file o l'assembly CrystalDecisions.ReportAppServer.ClientDoc

Il messaggio di eccezione:

Impossibile caricare il file o l'assembly 'CrystalDecisions.ReportAppServer.ClientDoc, Version = 13.0.2000.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304' o una delle sue dipendenze. Il sistema non trova il file specificato.

Il file è nel mio GAC. Sto sviluppando su una macchina a 32 bit (Windows 7) con VS2010, tutto è .NET4. La macchina host di destinazione è Windows 2008 R2 a 64 bit. La mia macchina locale ha l'installazione CR per VS2010; la macchina host ha i runtime a 64 bit per VS2010. Sto compilando tutto il mio codice in modalità "Any CPU" per questa applicazione web.

Mi viene in mente che non riesce a trovare il file nel GAC. Questa è un'applicazione IIS; c'è qualche tipo di problema di permessi? Penserei che IIS avrebbe accesso al GAC.

Alcuni suggerimenti su cosa fare sarebbero apprezzati.

+0

In diverse dll di terze parti con cui ho lavorato, PublicKeyToken è diverso per le versioni a 32 e 64 bit. Se funziona su una macchina, ma non sull'altra, questo potrebbe essere un posto dove guardare. è solo una supposizione, però ... – David

+0

Bene il file con quel token di chiave pubblica esiste nel GAC, esattamente come descritto. Non capisco perché la mia applicazione web non riesca a trovarla. –

risposta

14

Si scopre la risposta era ridicolmente semplice, ma mistificante sul perché fosse necessario.

In Gestione IIS sul server, ho impostato il pool di applicazioni per la mia applicazione Web per non consentire gli assembly a 32 bit.

Sembra presupporre, su un sistema a 64 bit, che è necessario l'assemblaggio a 32 bit. Bizzarro.

+0

o in alternativa: C: \ inetpub \ AdminScripts \ adsutil.vbs SET w3svc/AppPools/Enable32bitAppOnWin64 0 – ariscris

+0

Il mio caso era un'applicazione WPF. Doveva disabilitare l'opzione "Preferenza a 32 bit" nelle preferenze di Project. – RonaldPaguay

3

1) modificare il proprio profilo .NET dal profilo Cliente di per .Net Framework 4,0 http://msdn.microsoft.com/en-us/library/bb398202.aspx

2) Controllare le Tipi Embed Interop bandiera

Embed Interop Types flag http://weblogs.asp.net/cazzu/archive/2011/03/11/check-your-embed-interop-types-flag-when-doing-visual-studio-extensibility-work.aspx

+0

Tutti i miei progetti usano già il profilo 4.0; Non ho mai avuto molto successo con il profilo del cliente (non so perché questo è un valore predefinito per qualsiasi progetto). Controllerò le impostazioni di Interop domani mattina. –

+0

Tutti i miei riferimenti sono già impostati per non includere i tipi di intervallo. –

+0

ah scusa vale la pena provare –

2

Riguardo al sistema a 64 bit che richiede supporto a 32 bit. Non lo trovo così bizzarro:

Sebbene distribuito su un sistema a 64 bit, ciò non significa che tutti gli assembly di riferimento siano necessariamente assembly Crystal Reports a 64 bit. Inoltre, gli assembly Crystal Reports sono in gran parte solo wrapper di una raccolta di DLL legacy su cui sono basati. Molte DLL a 32 bit sono richieste dall'assieme di riferimento principale. Il messaggio di errore "impossibile caricare l'assembly" riguarda anche queste DLL. Per vedere visivamente quali sono, vai su www.dependencywalker.com ed esegui "Depends" sull'assembly in questione, direttamente su quel server IIS.

2

È sufficiente installare i download di Crystal Report Report Run Time su Deployment Server. Se il problema persiste, posiziona la cartella asp_client nella cartella principale del progetto.

+0

Dovrebbe funzionare senza dover installare il runtime. Qual è la soluzione quando si esegue il sito Web su un server cloud e non si ha accesso al desktop? Che mi dici dei test unitari? –

Problemi correlati