1. Introdução ao problema Durante o processo de desenvolvimento do site VS2005, a publicação do site sempre foi um problema. O site criado pelo VS2005 possui vários diretórios padrão: App_Code, App_Data, App_Themes...
Se for um arquivo cs/vb, como a classe UploadFile.cs UploadFile, este arquivo de classe não possui um arquivo aspx visível, então este arquivo deve ser colocado no diretório App_Code, caso contrário esta classe estará inacessível no site do VS2005. Basta colocar, mas na hora de compilar (meu VS2005 é a versão Team, a geração não responde. Parece que estou verificando o código novamente, e só posso usar o site de publicação para pré-compilar. Não sei como são as outras versões .) O problema surge. Após selecionar o site de publicação, você poderá escolher como publicar. Geralmente, você pode escolher o padrão. , App_Code.dll no diretório bin App_Web_ (caracteres aleatórios).dll, dll referenciada e outros arquivos. O problema está aqui. Se você quiser fazer um programa livre de virtualização, não seria possível que dois App_Code.dlls precisassem ser colocados no diretório bin? Não haverá conflito? Além disso, se o programa mudar uma vez e precisar ser republicado, é isso. Veja as coisas boas que o VS2005 fez. inherits="MyCodeGif, App_Web_vf3ukhnv" era originalmente um arquivo MyCodeGif.aspx e um arquivo MyCodeGif.aspx.cs Agora o arquivo MyCodeGif.aspx herda de MyCodeGif, App_Web_vf3ukhnv. cs.App_Web_vf3ukhnv é o nome de um arquivo dll na pasta bin. Se você tentar publicá-lo novamente, surgirá uma pergunta mais problemática. Por que a página MyCodeGif.aspx é herdada de MyCodeGif, App_Web_qwdwqd? Os nomes dos assembly compilados são diferentes!
2. A relação entre páginas e classes em ASP.Net
No ASP.Net, as páginas podem herdar de classes e ter herança múltipla. por exemplo
Arquivo de página MyCodeGif.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>MyCodeGif.aspx.cs é assim
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Collections;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
usando FreeCodeNum;
classe parcial pública MyCodeGif: System.Web.UI.Page
{
protegido void Page_Load (remetente do objeto, EventArgs e)
{
//.....lógica
}
}
Pode-se observar que a página MyCodeGif.aspx herda da classe MyCodeGif
e também pode ser herdada desta forma
Arquivo de página MyCodeGif.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="MyCodeGif" %>
Esta é a aparência de MyCodeGif.aspx.cs
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Collections;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
usando FreeCodeNum
classe parcial pública MyCodeGif: PageBase;
{
protegido void Page_Load (remetente do objeto, EventArgs e)
{
//.....lógica
}
}
PageBase.cs assim
usando o sistema;
usando System.Web;
System.Collections
;
/// Descrição resumida do PageBase
/// </sumário>
classe pública PageBase: System.Web.UI.Page
{
publicPageBase()
{
}
}
Assim como meu arquivo de página MyCodeGif.aspx, posso até
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyCodeGif.aspx.cs" Inherits="PageBase" %>Ou seja, a página herda diretamente da classe PageBase.
Conclusão: as páginas ASP.Net podem herdar de subclasses estendidas [herdadas da classe pai da classe System.Web.UI.Page]
3. Solução: você também pode personalizar o nome do assembly no VS2005 - ou seja, ao criar o tempo do projeto. , não na hora do site. Em outras palavras, depois que o site criado for escrito, você poderá recriar um projeto e recompilar o código do site. Pode ser necessário alterar a herança do arquivo aspx após finalizá-lo, mas pode não ser necessário alterá-lo. Depende de como você o salva, pois a herança do arquivo aspx está relacionada apenas ao nome da classe (se houver). um namespace, o namespace também deve ser especificado). O arquivo de página MyCodeGif.aspx pode ser alterado para
<%@ Page Language="C#" AutoEventWireup="true" Inherits="PageBase" %>
Remova CodeFile="MyCodeGif.aspx.cs" de dentro.
Desta forma, o site pode ser publicado da mesma forma que o VS2003. O processo pode ser um pouco complicado, mas acho que é bastante útil para manutenção posterior. Afinal, estou acostumado com o VS2003 e posso fazer os mesmos programas sem virtualização de 2003.
Texto completo. Espero que possa ser útil para todos.
Autor: Xie Ping, Sunset Track 27/05/2006