2013-03-07 8 views
8

Prefazione:Come risolvo Rapporto errore di distribuzione quando fa riferimento System.Core (4.0) sotto SSRS 2008R2

ambiente di sviluppo: Visual Studio 2010 con le offerte + MSSQL 2012 sulla scatola locale

Ambiente di produzione: MSSQL 2008 R2 per server di report live

Ho riscontrato un problema con la distribuzione di un report quando si fa riferimento a System.Core nel report. L'errore è sotto

Errore durante il modulo di codice di caricamento: ‘System.Core, Version = 4.0.0.0, Lingua = il neutro PublicKeyToken = b77a5c561934e089’. Dettagli: Impossibile caricare il file o l'assembly 'System.Core, Versione = 4.0.0.0, Cultura = neutra, PublicKeyToken = b77a5c561934e089' o una delle sue dipendenze. Questo assembly viene creato da un runtime più recente rispetto al runtime attualmente caricato e non può essere caricato.

Sto facendo riferimento a System.Core nel mio report in modo da poter utilizzare la classe TimeZoneInfo. Ho visto altre domande relative all'utilizzo di questa classe in SSRS e non sono stato in grado di risolvere il problema seguendo uno dei consigli in queste domande.

REF

Working with Time Zones in SSRS

SSRS 2k8, custom dll, file not found

Reporting Services 2012 deploy error: "Error while loading code module"

posso fare riferimento al System.Core 4.0 ed eseguire localmente senza alcun problema; tuttavia, quando distribuisco, ottengo il messaggio di errore sopra riportato. Per chiarire ulteriormente ... questo accade DURANTE il processo di distribuzione, non dopo la distribuzione e il tentativo di eseguire il report sul server.

EDIT

La RDL xml rapporto per CodeModules assomiglia a questo:

<CodeModules> 
<CodeModule>System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 

Questo è circa tanto "embedding" posso dire che lo fa. In realtà è solo un riferimento all'assemblea dal suo aspetto.

L'assistenza sarebbe molto apprezzata.

SOLUZIONE Dal momento che non è possibile fare riferimento 4.0, è possibile fare riferimento 3.5 per ottenere l'accesso alla classe TimeZoneInfo.

Fase 1. Creare una classe wrapper per la logica TimeZoneInfo si desidera impiegare

Punto 2. Obiettivo 3.5

Fase 3.Creare una versione di rilascio e copiarla nella directory [DRIVE]: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PrivateAssemblies in modo che il progettista possa caricarla

Passaggio 4. Distribuire lo stesso assieme a SQL Server @ la seguente cartella [DRIVE]: \ Programmi \ Microsoft SQL Server \ MSRS10.SQL2008 \ Reporting Services \ ReportServer \ bin \

Ora è possibile distribuire il report. Così i miei errori sono stati i seguenti

  1. non ho Riferimento 3.5

  2. non ho copiato nella directory appropriata per il mio esempio Visual Studio per raccogliere l'assemblea. Ho spostato la mia installazione in una directory diversa e non l'ho inserita nel nuovo percorso.

UPDATE Se qualcuno sta cercando di ref NET 4.0 ins SSRS 2012 e al di sopra ed ancora ottiene un errore, la risposta è semplice. SSRS 2012 e il 2014 (?) Ancora non supportare .NET 4,0

source

Questo sembra suggerire che SSRS 2014 non supporta neanche (io sono senza parole, MICROSOFT!) MS KB

+0

Si è tentato di posizionare la versione dell'assieme che si sta utilizzando in modo che il progettista del report possa accedervi. È possibile che il processo di distribuzione stia eseguendo un controllo di versione utilizzando la cartella .. \ Visual Studio 8 \ Common7 \ IDE \ PrivateAssemblies e non la cartella del server di report. Sono certo che questo è dove SSRS cerca gli assembly embedded in fase di progettazione. Questo è probabilmente un avvertimento e non un errore. –

+0

L'assembly è System.Core che si trova nel GAC. Questo è il motivo per cui sono così confuso. Se è nel GAC, perché non viene "raccolto"? – Hardrada

+0

Poiché il rendering e l'elaborazione dei report non si basa su .NET nello stesso modo delle app web/form, suppongo che SSRS tratti ogni assembly incorporato in un file .rdl come assembly personalizzato. –

risposta

0

Come richiesto:

SOLUZIONE

Dal momento che non è possibile fare riferimento 4.0, è possibile fare riferimento 3.5 per ottenere l'accesso al Classe TimeZoneInfo.

Fase 1. Creare una classe wrapper per la logica TimeZoneInfo si desidera impiegare

Punto 2. Obiettivo 3.5

Fase 3. Costruire una versione di rilascio e copiarlo al vostro [DRIVE]: \ Program File (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PrivateAssembly per consentire al designer di caricarlo

Passaggio 4. Distribuire lo stesso assembly su SQL Server @ nella seguente cartella [DRIVE]: \ Programmi \ Microsoft SQL Server \ MSRS10.SQL2008 \ Reporting Services \ ReportServer \ bin \

Ora è possibile distribuire il report. Così i miei errori sono stati i seguenti

non ho Riferimento 3.5

non ho copiato nella directory appropriata per il mio esempio Visual Studio per raccogliere l'assemblea. Ho spostato la mia installazione in una directory diversa e non l'ho inserita nel nuovo percorso.