sábado, agosto 14, 2010

Resolvido: Could not load type 'System.Web.UI.ScriptReferenceBase'

Qual desenvolvedor nunca disse "Mas aqui roda direitinho"? Nas minhas aventuras recentes com o ASP.Net um aplicativo apresentou a "simpática" mensagem de erro abaixo quando foi instalado no servidor do cliente e se tentou navegar para uma página com uma pitada de Ajax:

Could not load type 'System.Web.UI.ScriptReferenceBase' from assembly 'System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

Obviamente eu nem tinha ideia do que era o tal 'System.Web.UI.ScriptReferenceBase'.

Felizmente o Google mostrou que muita gente já enfrentou isto e não é difícil achar a solução: instalar o Service Pack 1 do .NET 3.5 no servidor. Um pouco mais trabalhoso foi achar alguém que explicasse o porque.

A classe 'System.Web.UI.ScriptReferenceBase' foi introduzida no SP1, daí não ser encontrada no .NET 3.5 "original". Sendo um desenvolvedor consciencioso, é claro que a minha máquina de desenvolvimento e o meu servidor de teste estão atualizados. Quando você compila uma aplicação ASP.Net em uma máquina com o .NET 3.5 SP1, são usadas as bibliotecas mais novas do .NET e as classes de referência a script (usadas para implementar o Ajax) tem como classe base a 'System.Web.UI.ScriptReferenceBase'.

Embora o Visual Studio deixe selecionar a versão alvo de .NET, ele não chega ao ponto de permitir distinguir entre .NET 3.5 e .NET 3.5 SP1. Portanto depois que você atualizou a máquina de desenvolvimento os seus programas (que usem o Ajax ou as classes de referência a script) só rodarão em servidores atualizados.

Achei esta explicação neste blog.

Nenhum comentário: