Como publicar relatórios em Asp.Net com ReportViewer na Locaweb

Mais um capítulo da saga de desenvolver em Asp.Net:

Precisei de uma ferramenta para gerar relatórios em um sistema em Asp.Net que desenvolvo. Como utilizo o Visual Web Developer 2008, instalei o Report Viewer 2008, aprendi a usá-lo, montei um relatório bem legal e fui *tentar* publicar na Locaweb.


Normalmente quando adiciono componentes aos Web Forms as dlls necessárias são copiadas para a pasta \bin do meu projeto automaticamente. Neste caso, não havia sido copiada nenhuma, e tive a esperança ingênua de que não seria necessário. Claro que era. Ao tentar carregar a página do relatório online recebi a mesagem de erro:

Parser Error Message: Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Uma rápida pesquisa no meu computador me indicou o local da dll solicitada. Como utilizo o Windows 7 64 bits, no meu caso a dll estava em:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\ReportViewer

Fiz upload e tentei acessar novamente. agora apareceu o erro:
Parser Error Message: Could not load file or assembly 'Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Pesquisei no Wiki da Locaweb e vi que estava no caminho certo. Só que no meu caso foi mais complexo, pois a nova dll requisitada não se encontrava na pasta do Report Viewer. Fiz diversas buscas, procurei acessando os locais mais prováveis e não encontrei. Como funcionava no meu computador e conferi que havia uma entrada no Web Config que fazia referência à essa dll, eu tinha certeza de que ela se encontrava em algum lugar, bastava descobrir onde.


Lembrei do GAC, o Global Assembly Cache, e fui conferir. Realmente, estava lá. Só não havia como copiar a dll pelo Windows Explorer, tive que acessar pelo prompt de comando.

A maldita dll fica na pasta:
C:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\9.0.0.0__b03f5f7f11d50a3a

 

A estrutura do .Net organiza a pasta C:\Windows\assembly de uma forma que pelo Windows Explorer aparece o seguinte:
Na real, o que aparece ali é apenas uma referência ao real local da dll, que fica na pasta citada anteriormente.

Copiei pelo prompt para a pasta \bin do meu projeto, fiz upload e......
An error occurred during local report processing.
The definition of the report 'Main Report' is invalid.
An unexpected error occurred in Report Processing.
Could not load file or assembly 'Microsoft.ReportViewer.ProcessingObjectModel, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.


Bom, agora eu já sabia o que fazer. Prompt do dos (cmd), copiar a Microsoft.ReportViewer.ProcessingObjectModel.dll da pasta GAC:

Feito! Levei 15 minutos pra construir o relatório e só 4 horas pra botar ele no ar. Foi mais rápido dessa vez do que no problema anterior.
 
Ambiente de desenvolvimento:
Visual Web Developer 2008 Express
Report Viewer 2008
Windows 7 RC1 64 bits