Login.aspx não é um webControl?
Venho percebendo que as pessoas estão tendo certas dificuldades (até mesmo por falta de documentação) na publicação da aplicação usando os recursos do Visual Studio 2005 e Framework 2, onde realmente temos um ganho enorme com produtividade se usados esses recursos da forma correta.
Usando estas mesmas ferramentas e recursos citados acima, deparei com o seguinte erro:
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS0030: Cannot convert type ‘ASP.login_aspx’ to ‘System.Web.UI.WebControls.Login’
Source Error:
Line 112: public login_aspx() {
Line 113: string[] dependencies;
Line 114: ((Login)(this)).AppRelativeVirtualPath = “~/Login.aspx”;
Line 115: if ((global::ASP.login_aspx.@__initialized == false)) {
Line 116: dependencies = new string[1];
Source File: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\publishtest\43f5e5ee\53e358e4\App_Web_login.aspx.cdcab7d2.cji1wrof.0.cs Line: 114
O mais estranho é que executando a aplicação em nossa máquina, esse problema não ocorre. Só acontece quando publicamos utilizando os recursos do Visual Studio (Build - PulishWeb Site) e marcamos a opção “Allow this precompiled site to be updateable”, conforme mostra figura abaixo:
Figura 01 – Publicando uma aplicação utilizando recursos do Visual Studio 2005.
Figura 02 – Habilitando a opção de compilar arquivos de code-behind.
Com esta forma de publicação, o Visual Studio faz a publicação de nossa aplicação “ocultando” nosso código fonte, fazendo com que dessa forma, o cliente não tenha acesso direto aos fontes da aplicação.
Quando marcada a opção “Allow this precompiled site to be updateable”, é feita a compilação de todos os nossos arquivos .cs e/ou .vb.
Com isso, quando temos uma página Login.aspx e o nome de sua classe é Login existe uma tentativa de ser dar um cast em nossa página (System.Web.UI.Page) para o controle Login do ASP.NET 2.0, e é exatamente aí onde mora o erro, afinal, nossa página é do tipo System.Web.UI.Page - ou de alguma outra classe que, por sua vez, herdará de System.Web.UI.Page. Se tentarmos por curiosidade ou teimosia convertermos uma página para um outro tipo que não seja Page, realmente constataremos que não é possível convertê-la. E é exatamente este o cenário em que temos no erro acima citado, pois tenta-se converter um System.Web.UI.Page para System.Web.UI.WebControls.Login.
Figura 03 – Cenário do erro citado acima, Página Login.aspx com namespace de “Login”.
Para contornar este problema, basta renomearmos o nome da classe da página (para um nome que não seja o de um controle de preferência) e, consequentemente, alterar a propriedade Inherits que está na tag @Page do .aspx para esse novo nome de classe.
Figura 04 – Alterações a serem feitas no code-behind.
Figura 05 – Alterações a serem feitas no arquivo .aspx.