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.
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. –