2010-06-30 26 views
12

Estoy usando el control del reportviewer de VS 2010 para crear informes del lado del cliente (rdlc). Todo funciona bien en mi máquina de desarrollo, y cuando compilo manualmente (a través de VS2010) y despliegue manualmente en una máquina de prueba que no tiene herramientas de desarrollo instaladas.MSBuild utilizando la versión incorrecta del ensamblado para compilar el archivo RDLC

Para que la máquina de prueba funcione (sin instalar VS2010 o ReportViewer.exe), tuve que agregar referencias en mi proyecto a Microsoft.ReportViewer.Winforms, Microsoft.ReportViewer.Common y Microsoft.ReportViewer.ProcessingModel y tener todos ellos "Copiar local".

Tengo los archivos rdlc configurados para Build Action => recursos incrustados. Esta es la configuración predeterminada al agregar una nueva rdlc al proyecto. Estoy abierto a configurar esto, de lo contrario, si esto resolvería este problema (no sé si está relacionado).

El problema: desde que se agregaron los archivos rdlc, la solución ya no se genera en el servidor de compilación. He instalado ReportViewer.exe en el servidor de compilación y he verificado que los ensamblados necesarios existen en el GAC. El framework .Net 4 NO está instalado en el servidor de compilación. No creo que sea necesario porque la solución se dirige al tiempo de ejecución 3.5.

creo que la raíz del problema es el siguiente desde el registro de generación:

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.

De lo que puedo decir, Microsoft.ReportViewer.Common versión 10.0.0.0 es lo que se debe utilizar para "compilar" el rdlc, pero parece que MSBuild está usando 9.0.0.0. Creo que si pudiera forzarlo a utilizar la versión correcta (que está instalada en el GAC), la solución se compilaría.

Respuesta

7

Esto se debe a que su archivo Microsoft.Common.Targets apunta a la versión 9.0 del ensamblado.

Si mira en [sysdir] \ Microsoft.NET \ Framework \ v3.5 encontrará Microsoft.Common.targets, que está manejando mucho de lo que hace MSBuild. Esta versión del archivo de objetivos comunes apunta al [Program Files]\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets forzando a MSBuild a ejecutar con la versión 9.0.

Cuando instaló .NET 4.0, obtuvo un nuevo archivo de objetivos comunes en el directorio v4.0.x, este nuevo ahora apunta a [Program Files]\MSBuild\Microsoft\VisualStudio\v10.0\ReportingServices\Microsoft.ReportingServices.targets que apunta a la versión 10.0 de los ensamblados de ReportViewer.

El 10.0 ReportViewer está compilado contra .NET 3.5 y está pensado para funcionar tanto en 3.5 como en 4.0. Es muy probable que se deshaga del marco de trabajo de .NET 4.0 y modifique su archivo de objetivos comunes de 3.5 para que apunte al nuevo archivo de destino ReportingServices, y debería funcionar. En teoría, de todos modos, nunca lo he intentado. Puede que sea mejor que se quede con 4.0, ya que es lo que pretendíamos cuando diseñamos el soporte MSBuild para el nuevo visor.

+0

No voy a meterme con eso ahora que está funcionando, pero la explicación es ciertamente esclarecedora: busqué alto y bajo en Google esta información y no pude encontrar nada. –

2

Resulta que sí necesitaba .Net 4.0 Framework, y más específicamente la versión 4.x de MSBuild, que usa la versión más reciente de la biblioteca Microsoft.ReportViewer.Common.

Por lo tanto, incluso si se dirige al marco 3.5, si crea el rdlc con VS2010, se espera que se "compile" con las herramientas 4.0.

4

Tuve un problema muy similar. De repente, ya no pude construir un proyecto VS2010 que contuviera un archivo .rdlc. No estaba convirtiendo ningún informe o usando un servidor de informes, todo era local. Intenté crear un nuevo proyecto y agregar un nuevo informe rdlc vacío y acceder a la compilación, y no funcionó.Sólo un día dejó de compilación y me dio el siguiente error:

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.

Resulta que el problema era mi "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ ReportingServices \ Microsoft.ReportingServices.targets "archivo de alguna manera ha cambiado. La parte superior de mi archivo fue:

<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"/>

Y que debería haber sido:

<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"/>

I cambiado eso ni un "Uso de tareas" línea en el archivo y todo se basa de nuevo. REALMENTE frustrante y se comió dos días de mi vida. Esperar publicar este comentario puede ayudar a alguien más en una situación similar.

Jim Lafler

1

rutas de archivos pegar no parece estar pasando por ... ¿qué tal esto:

fue:

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

Y es ahora:

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

James

6

Simplemente instale Microsoft Report Viewer 2010 SP1.

+0

Respuesta perfecta. Lo suficientemente simple, y no requiere problemas con los archivos predeterminados que más tarde pueden volver a morder en el <...>. – Jesse

+0

Esto funcionó para mí, no requirió que modificara ningún archivo .targets, y la versión más reciente de DLL en el GAC aparece en la ventana Propiedades de elementos de referencia. –

3

He intentado volver a instalar todo y no funcionó. Entonces, traté de actualizar Microsoft.ReportingServices.targets según la publicación de Jim pero incluso no funcionó para mí.

Al final, acabo de copiar Microsoft.ReportingServices.targets desde otra máquina (donde se estaba ejecutando sin error). Y sorprendentemente, está funcionando.

La diferencia adicional Noté mientras que en comparación, para cambiar PublicKeyToken junto con Versión.

Este puede ser el caso solo para mí, pero la publicación de Jim fue muy útil.

SFUH

0

El NetFx40_LegacySecurityPolicy se habilitó en mi Devenv.exe.config, y cuando me comentó esta línea de salida, el proyecto construido con éxito.

Hemos habilitado la política de seguridad heredada en nuestro equipo para permitir que nuestro equipo trabaje con controles DevExpress 7.2 desde Visual Studio 2010, pero en este caso, muestra que el enfoque que tomamos no siempre es el mejor.

0

Perdí 2 días completos de desarrollo debido a un problema similar. Al construir mi proyecto tendría éxito, pero en la reconstrucción falló sin errores. Al investigar el detallado registro de compilación en la ventana de Salida, me dirigió hacia un problema con la función rdlcompile (por lo que se informa el problema de incrustación del informe local de los servicios). Después de probar cada cosa, finalmente logro resolver el problema, pero deshabilitando mi antivirus. El antivirus estaba de alguna manera interfiriendo con mi reconstrucción y provocó que la reconstrucción fallara.

Después de desactivar la detección de virus, la reconstrucción de las obras 100%

2

Tengo el mismo problema: el uso de ReportViewer 2012 (versión de asambleas comienza con 11). Tanto en las máquinas locales y en la construcción de la máquina se instalan ReportViewer 2012 paquete y VisualStudio 2013. En las máquinas locales de compilación en VS tiene éxito, pero en construcción de la máquina durante la construcción en cola MSBuild tiros dicho error:

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. 

Me trataron de modificar Microsoft. Common.targets de la carpeta .NET 3.5 en modo, que se describe en esta publicación, pero no tiene efecto. Entonces abrí Microsoft.Common.targets de .NET 4.0 carpeta, y hallaron allí esas cadenas:

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

Entonces me di cuenta de que puede ser un problema en el valor incorrecto de la variable $ (VisualStudioVersion), por lo que añaden a construir definición en la sección "Procesar" este parámetro MSBuild:

/p:VisualStudioVersion=12.0 

Y funcionó! Build completed successfully. Espero que esto ayude a alguien.

+0

Gracias. Después de horas tratando de resolver este problema, esto es lo único que lo solucionó. Edité el archivo del proyecto y cambié ' 10.0' a ' 10.0' – mejobloggs

+0

Esto también me funciona ! Gracias. – user3110409

0

Tengo mismo problema en mi Visual Studio 2013. La versión de DLL del servicio de información en mi proyecto es la versión = 10.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a

cuando entré ReportingServices apunta

C: \ archivos de programa \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ ReportingServices \ Microsoft.ReportingServices.targets

me encontré con la versión 11.0.0.0 tarea es

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

Cuando cambié la versión de la tarea a 10.0.0.0 correspondiente a la versión dll en mi proyecto.

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

It 'worked.

Cuestiones relacionadas