.NET Tutorial 46. Visual Studio 2010, Crystal Reports 13 y .NET Framework 3.5 SP1

Hace relativamente poco que estoy usando Visual Studio 2010.
Parafrasenado a no sé quien:

Visual Studio 2008 ha muerto
Viva Visual Studio 2008

🙂

Como sabréis (y sino para eso esta tito Olly) en el VS2010 no se incluye el Crystal Reports.
Decir para los "no iniciados" :), que Crystal Reports es posiblemente una de las herramientas de reporting más utilizadas. ¿Reporting? ¿Ein?.
Si, lo que lees. Crystal Reports permite generar "informes" con multitud de formatos, grupos, esquemas, etc. Y lo dicho, se utiliza muchísimo en el ámbito profesional.

Pues bien, cuando por primera vez queremos añadir un informe (*.rpt) a nuestra solución, el IDE de Visual Studio nos redirige a la página de Crystal Reports (ahora perteneciente a SAP) para descargar el paquete de instalación, runtimes, y merged modules.

Bien, una vez finalizada la instalación ("sólo" son 250 megas de nada) ya podremos añadir reports a nuestros proyectos.

Ete aquí donde empiezan los "problemas".

Por defecto, una solución en VS2010 se inicia para ser compilada con el .NET Framework 4
Esto no es "del todo cierto" como veremos más adelante. En realidad se inicia para ser compilada con el .NET Framework 4 Client Profile

Pues bien, El formulario no tiene nada de código.  Añadimos un report (totalmente en blanco y sin "linkar" a ninguna BDD) a nuestro proyecto:

Repito que no hay ni código en el formulario ni en el report.
Ejecutamos y esto es lo que obtenemos (yo con cara de aiba-la-ostia-patxi) :

Cómo véis, hay errores y warnings a "tutiplén" y eso que no hemos escrito ni una sola línea de código.

Examinamos todos los archivos de la solución activando la opción adecuada:

Al insertar un report en nuestra solución / proyecto, además del archivo *.rpt, se genera automáticamente un archivo *.vb (*.cs en caso de C#)
Abrimos ese archivo en la vista de código y observamos esto:


(Haz click para agrandar)

Se puede observar que hay multitud de objetos que no están referenciados y que el VS2010 no entiende y por ende genera todos los errores que vimos antes.

Soluciones quiero!!!

La solución en este caso es "simple". Basta con cambiar el target del .NET Frameword de la aplicación y establecer el .NET Framework 4:


(haz click para agrandar)

Mencionar que esta versión de Crystal Reports para VS2010 tambien se puede usar si el target es .NET Framework 3.5, pero no con las versiones "Client Profile" ya bien sean Client Profile de .NET Framework 3.5 o .NET Framework 4

Pues bien, al cambiar de target a .NET Framework 4 desaparecen todos los errores y warnings y la aplicación compila sin errores:


(Haz click para ampliar)

Bien, a priori parece que todo está solucionado, pero como siempre hay un "pero", y éste no es tan obvio con el problema anterior.

El tema es cuando añadimos a nuestra solución un proyecto de instalación.
Como sabréis los proyectos de instalación generan un *.msi que instala todos los "requisitos previos".
De esta forma, nos aseguramos que nuestra aplicación se va a ejecutar correctamente en un PC distinto al PC de desarrollo.

Pues bien, añadimos un nuevo proyecto de instalación como lo haciamos en las versiones anteriores de Visual Studio:


(Haz click para agrandar)

En los requisitos previos de la instalación marcamos el .NET Framework, el Windows Installer 3.1 y como utilizamos Crystal Reports pues el "SAP Crystal Reports for .NET Framework 4.0"

En mi caso particular, especifico que los requisitos previos estan en la misma ubicación que la aplicación. De esta forma una vez "compilado todo el proyecto", dispondremos de una carpeta donde están todos los archivos necesarios. Esta carpeta se quema en un CD/DVD y se entrega al cliente/amigo/cuñado/Señor X:


(Haz click para agrandar)

Vale, vamos a generar la instalación y ocurre esto (¿ Lol ?):


(Haz click para agrandar)

Como véis, hay dos archivos que el compilador no puede encontrar y por lo tanto, no puede generar la instalación.

Soluciones quiero!!!

Por raro que parezca, la instalación de Crystal Reports "no instala" los runtimes en la carpeta que usa Visual Studio para almacenar los "requisitos previos".

Esta carpeta, conocida como BootStrapper está en  la siguiente ubicación:


(Haz click para agrandar)

Si que existe una carpeta llamada Crystal Reports for .NET Framework 4.0 pero no estan los runtimes:


(Haz click para agrandar)

La solución es copiar los runtimes de Crystal Reports (tanto de 32 como de 64 bits) aquí dentro:


(Haz click para agrandar)

Con esta "sencilla" operación la compilación del proyecto de instalación ya no genera error. Remarco lo de "sencilla" porque casi me vuelvo loco para averiguar por que diantres pasaba esto. 


Bonus Track

Ocurre una cosa parecida si indicamos como requisito previo el .NET Framework 3.5 SP1
Al generar la solución de instalación se producen un monton de errores indicando que tal o cual archivo no ha podido ser encontrado y por lo tanto la instalación no se genera correctamente.

Si mirarmos en la carpeta del bootstrapper del DotNetFX35SP1 vemos también está vacia:


(Haz click para agrandar)

y lo mismo en la subcarpeta del idioma español:


(Haz click para agrandar)

Soluciones quiero!!!

Pues hay que bajarse dos cosas:

1) el .NET Framework 3.5 SP1 y copiarlo en la carpeta DotNetFX35SP1:


(Haz click para agrandar)

Además hay que modificar el archivo product.xml de la siguiente forma:

hay que añadir estas 3 líneas:

<PackageFile Name="TOOLSclwireg.exe"/>
<PackageFile Name="TOOLSclwireg_x64.exe"/>
<PackageFile Name="TOOLSclwireg_ia64.exe"/> 

y ponerlas justo debajo de 

<PackageFiles CopyAllPackageFiles="IfNotHomeSite">

además hay que cambiar la PublicKey de

<PackageFile Name="dotNetFX30XPSEPSC-x86-en-US.exe"

y de 

<PackageFile Name="dotNetFX30XPSEPSC-x86-en-US.exe"

Hay que establecer para los dos archivos anteriores la siguiente PublicKey:

PublicKey="3082010A0282010100A2DB0A8DCFC2C1499BCDAA3
A34AD23596BDB6CBE2122B794C8EAAEBFC6D526C232118BBCDA5
D2CFB36561E152BAE8F0DDD14A36E284C7F163F41AC8D40B1468
80DD98194AD9706D05744765CEAF1FC0EE27F74A333CB74E5EFE
361A17E03B745FFD53E12D5B0CA5E0DD07BF2B7130DFC606A288
5758CB7ADBC85E817B490BEF516B6625DED11DF3AEE215B8BAF8
073C345E3958977609BE7AD77C1378D33142F13DB62C9AE1AA94
F9867ADD420393071E08D6746E2C61CF40D5074412FE805246A2
16B49B092C4B239C742A56D5C184AAB8FD78E833E780A47D8A4B
28423C3E2F27B66B14A74BD26414B9C6114604E30C882F3D00B7
07CEE554D77D2085576810203010001 " />

 

2) También hay que bajarse "los textos" del .NET Framework 3.5 SP1 en español

Dentro de la carpeta es hay que crear un carpeta llamada DotNetFX35:


(Haz click para agrandar)

y dentro de esa carpeta hay que crear estas dos carpetas


(Haz click para agrandar)

y dentro de cada una de esas dos carpetas copiar los "textos" en español que nos acabamos de bajar

 

Bien, aprovecho para comentar que VS 2010 no me acaba de gustar, me da la sensación que el entorno es más lento que el VS 2008, bueno, no es una sensación, el mismo proyecto (sobre unos 130 archivos entre clases, formularios y demás) tarda más en cargar en VS 2010 que en VS 2008.
Además la fuente que han escogido para el IDE ("consolas") me parece horrosa a más no poder, la colocación de las distintas ventanas aún no me acaba de convencer, el nuevo sistema de ayuda en modo off-line tarda en inicializarse.

En fín que seguiré trasteando con él a ver que nos depara el futuro 🙂

Links útiles:

Crystal Reports (versión 13 con SP1) para Visual Studio 2010

.NET Framework 3.5 Service Pack 1 (paquete completo)
Paquete de idioma (Español) de Microsoft .NET Framework 3.5 SP1
Hilo de la MSDN para sobre los "errores" del tema del .NET Framework 3.5 SP1 

La información interesante sobre la PublicToken y la modificación del product.xml está en la sección 2.3.1.1 de este documento .Aunque en el título ponga Visual Studio 2008, lo que se explica es válido para el VS 2010, ya que se trata sobre el Service Pack 1 del .NET Framework 3.5 : http://download.microsoft.com/download/A/2/8/A2807F78-C861-4B66-9B31-9205C3F22252/VS2008SP1Readme.htm

 

Tutoriales relacionados:
.NET Tutorial 47. Visual Studio 2010, Crystal Reports y RecordSelectionFormula

.NET Tutorial 55. Crystal Reports, aplicaciones x86 y Windows de 64 bits  

Saludos.
mov eax,ollydbg; Int 13h 

 


Ollydbg ProSignature