2010-06-30 10 views
12

Utilizzo il controllo reportviewer da VS 2010 per creare rapporti lato client (rdlc). Tutto sta funzionando bene sulla mia macchina di sviluppo, e quando eseguo la compilazione manuale (tramite VS2010) e la distribuzione manuale su una macchina di prova che non ha installato gli strumenti di sviluppo.MSBuild Utilizzo della versione errata dell'assembly per compilare il file RDLC

Per far funzionare la macchina di prova (senza installare VS2010 o ReportViewer.exe), ho dovuto aggiungere riferimenti nel mio progetto a Microsoft.ReportViewer.Winforms, Microsoft.ReportViewer.Common e Microsoft.ReportViewer.ProcessingModel e averli tutti "Copia locale".

I file rdlc sono configurati per Build Action => risorse incorporate. Questa è l'impostazione predefinita quando si aggiunge un nuovo rdlc al progetto. Sono aperto a configurare questo altrimenti se questo risolvesse questo problema (nessuna idea se è collegato).

Il problema: dopo l'aggiunta dei file rdlc, la soluzione non si costruisce più sul server di build. Ho installato ReportViewer.exe sul server di build e ho verificato che gli assembly richiesti esistano nel GAC. Il framework .Net 4 NON è installato sul build server - non penso sia necessario perché la soluzione ha come obiettivo il runtime 3.5.

credo che la radice del problema è la seguente dal log di compilazione:

Target "RunRdlCompiler": Building target "RunRdlCompiler" completely. Output file "obj\Release\RdlCompile.compiled" does not exist. Using "RdlCompile" task from assembly "Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Task "RdlCompile": Report\RDLC\GreenReport.rdlc (0,0): error rsInvalidReportDefinition: The report definition is not valid. Details: The report definition has an invalid target namespace ' http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition ' which cannot be upgraded.

Da quello che posso dire, Microsoft.ReportViewer.Common versione 10.0.0.0 è quello che dovrebbe essere usato per "compilare" rdlc, ma MSBuild sembra utilizzare 9.0.0.0. Credo che se potessi costringerlo a usare la versione giusta (che è installata nel GAC), la soluzione si compilerebbe.

risposta

7

Questo perché il file Microsoft.Common.Targets punta alla versione 9.0 dell'assembly.

Se si guarda in [sysdir] \ Microsoft.NET Framework \ v3.5 \ troverete Microsoft.Common.targets, che è alla guida di un sacco di ciò che fa MSBuild. Questa verione del file dei target comuni punta a [Program Files]\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets forzando MSBuild a funzionare con la versione 9.0.

Al momento dell'installazione di .NET 4.0, si è ottenuto un nuovo file di obiettivi comuni nella directory v4.0.x, questo nuovo punta ora a [Program Files]\MSBuild\Microsoft\VisualStudio\v10.0\ReportingServices\Microsoft.ReportingServices.targets che punta alla versione 10.0 degli assembly di ReportViewer.

Il 10.0 ReportViewer è compilato su .NET 3.5 e ha lo scopo di funzionare sia in 3.5 che in 4.0. È molto probabile che tu possa sbarazzarti del framework .NET 4.0 e modificare il tuo file target comune 3.5 per puntare al nuovo file di destinazione ReportingServices, e dovrebbe funzionare. In teoria, comunque, non l'ho mai provato. Potresti stare meglio con la 4.0, poiché era quello che intendevamo quando abbiamo progettato il supporto MSBuild per il nuovo visualizzatore.

+0

Non ho intenzione di incasinarlo ora che sta funzionando, ma la spiegazione è sicuramente illuminante - ero Googling in alto e in basso per questa informazione e non ho trovato nulla. –

2

Risulta che ho avuto bisogno di .Net 4.0 Framework, e più specificamente la versione 4.x di MSBuild, che utilizza la versione più recente della libreria Microsoft.ReportViewer.Common.

Quindi, anche se si sta prendendo di mira il framework 3.5, se si crea il rdlc con VS2010 ci si aspetta che venga "compilato" utilizzando gli strumenti 4.0.

4

Ho avuto un problema molto simile. All'improvviso non sono più riuscito a creare un progetto VS2010 che contenesse un file .rdlc. Non stavo convertendo alcun rapporto o utilizzando un server di report, tutto era locale. Ho provato a creare un progetto nuovo di zecca e ad aggiungere un nuovo report rdlc vuoto e ho colpito build e non avrebbe funzionato.Solo un giorno ha smesso di compilazione e mi ha dato il seguente errore:

The report definition is not valid. Details: The report definition has an invalid target namespace 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' which cannot be upgraded.

scopre il problema era la mia "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ ReportingServices \ Il file Microsoft.ReportingServices.targets "era in qualche modo cambiato. La parte superiore del mio file era:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

E avrebbe dovuto essere:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

ho cambiato quello "Uso di Task" riga nel file e tutto costruisce di nuovo. Davvero frustrante e ha mangiato due giorni della mia vita. Sperando di postare questo commento può aiutare qualcun altro in una situazione simile.

Jim Lafler

1

percorsi di file incollare non sembra essere passare attraverso ... che ne dite di questo:

Was:

TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=8.0.0.0... 

ed è ora:

TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0... 

James

6

Basta installare Microsoft Report Viewer 2010 SP1.

+0

Risposta perfetta. È abbastanza semplice e non richiede problemi con i file predefiniti che potrebbero in seguito tornare a morderti nello <...>. – Jesse

+0

Questo ha funzionato per me, non mi ha richiesto di modificare alcun file .targets e la versione più recente di DLL nel GAC viene visualizzata nella finestra delle proprietà Oggetti di riferimento. –

3

Ho provato a reinstallare tutti e non ha funzionato. Quindi, ho provato ad aggiornare Microsoft.ReportingServices.targets come per il post di Jim, ma anche non ha funzionato per me.

Alla fine, ho appena copiato Microsoft.ReportingServices.targets da un'altra macchina (in cui era in esecuzione senza errori). E sorprendentemente, sta funzionando.

La differenza ulteriore che ho notato durante il confronto, per cambiare PublicKeyToken insieme versione.

Questo potrebbe essere il caso solo per me, ma il post di Jim è stato molto utile.

SFUH

0

La NetFx40_LegacySecurityPolicy è stato attivato nel mio Devenv.exe.config, e quando ho commentato questa linea, il progetto realizzato con successo.

Avevamo abilitato la politica di sicurezza legacy sul nostro team per consentire al nostro team di lavorare con i controlli DevExpress 7.2 da Visual Studio 2010, ma in questo caso mostra che l'approccio che abbiamo preso non è sempre il migliore.

0

Ho perso 2 giorni interi di sviluppo a causa di un problema simile. Sulla costruzione del mio progetto sarebbe successo, ma su ricostruzione è fallito senza errori. Quando ho analizzato il log di compilazione dettagliato nella finestra Output, mi sono indirizzato verso un problema con la funzione rdlcompile (quindi il problema di incorporamento dei report locali dei servizi di report). Dopo aver provato ogni cosa, riesco finalmente a risolvere il problema, ma disabilitando il mio antivirus. L'antivirus ha interferito in qualche modo con la mia ricostruzione e ha causato il fallimento della ricostruzione.

Dopo aver disabilitato scansione antivirus, ricostruire opere 100%

2

Ho lo stesso problema: usando ReportViewer 2012 (versione di assembly inizia con 11). Sia su macchine locali e sul sistema di compilazione sono installate ReportViewer pacchetto 2012 e VisualStudio 2013. In macchine locali compilazione in VS riesce, ma il sistema di compilazione durante la costruzione in coda MSBuild tiri tale errore:

The report definition is not valid. Details: The report definition has an invalid target 
namespace 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition' 
which cannot be upgraded. 

ho cercato di modificare Microsoft. Common.targets dalla cartella .NET 3.5 in modo, che è descritto in questo post, ma nessun effetto. lì poi ho aperto Microsoft.Common.targets da NET 4.0 cartella e trovato queste espressioni:

<!-- VS10 without SP1 and without VS11 will not have VisualStudioVersion set, so do 
that here --> 
<PropertyGroup> 
<VisualStudioVersion Condition="'$(VisualStudioVersion)' 
==''">10.0</VisualStudioVersion> 
</PropertyGroup> 

poi ho capito che il problema può essere in valore errato della variabile $ (VisualStudioVersion), così ho aggiunto a costruire definizione nella sezione "Processo" questo parametro MSBuild:

/p:VisualStudioVersion=12.0 

E ha funzionato! Build completato con successo. Spero che questo aiuti qualcuno.

+0

Grazie. Dopo ore e ore di tentativi per risolvere questo problema, questa è l'unica cosa che lo ha risolto per me. Ho modificato il file di progetto e modificato ' 10.0 'a' 10.0 ' – mejobloggs

+0

Questo funziona anche per me ! Grazie. – user3110409

0

Ho lo stesso problema sul mio Visual Studio 2013. la versione DLL del servizio di segnalazione sul mio progetto è la versione = 10.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a

Quando ho controllato il mio ReportingServices rivolge

C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ ReportingServices \ Microsoft.ReportingServices.targets

ho trovato la versione compito è 11.0.0.0

<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> 

Quando ho cambiato la versione dell'attività in 10.0.0.0 corrispondente alla versione dll sul mio proejct.

<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 

E 'funzionato.

Problemi correlati