Fui um pouco cruel no fim de semana e decidi atualizar o projeto para a plataforma 2.0. Como o VS2003 e o 2005 podem coexistir, o problema é relativamente fácil de resolver. Instale a versão Pro de 2005, abra o projeto original e atualize. o assistente aparecerá automaticamente. O projeto contém 7 subprojetos. Toda a lógica e exibição são implementadas no projeto em segundo plano. Cada arquivo no projeto da Web front-end implementa apenas uma chamada para o método em segundo plano e nenhum método avançado é usado em segundo plano. a atualização é muito tranquila.
Resumindo, os arquivos do projeto da Web foram excluídos. Acontece que dois arquivos ASPX não relacionados também foram levados em consideração no processo de compilação. Eu compilei, carreguei no servidor e relatei um erro. Posteriormente, descobri que o projeto recém-compilado não possuía a DLL do projeto Web, mas ainda estava lá no diretório do servidor. O resultado é uma confusão de referências internas. Exclua a DLL do antigo projeto da Web e está tudo bem.
Então planejei tentar o modo de publicação. Usei a função de publicação do site no item de menu gerar do VS2005 para definir o diretório para publicar. A opção foi definida para não permitir atualizações. o processo de compilação foi muito complicado. Depois que a compilação foi concluída, várias coisas foram geradas no diretório bin. Achei que copiar essas coisas para o servidor eliminaria a necessidade de uma compilação limpa. Acontece que o processo csc ainda aparece quando a página é acessada pela primeira vez. Depois que todo o site foi trocado, ainda havia vários processos csc, mas o processo de compilação foi um pouco mais rápido do que antes.
Ocorreu outro problema sério. O programa pareceu reiniciar automaticamente depois de um tempo, fazendo com que fosse compilado novamente. Posteriormente, uma janela de erro apareceu no servidor, informando que houve um erro no processo w3wp.exe. isto? Após selecionar Cancelar, o w3wp.exe foi reiniciado automaticamente e uma nova rodada de recompilação começou. Esse processo aconteceu três vezes e fiquei com tanto medo que voltei rapidamente para a versão 1.1. Dei uma olhada no visualizador de eventos e encontrei um monte de exceções não tratadas, que eram basicamente erros com valores vazios. É estranho, não houve problema no 1.1 e o código não foi alterado.
Mais tarde, encontrei um artigo (ninguém em chinês parece ter mencionado isso), http://www.eggheadcafe.com/articles/20060305.asp . O tratamento de exceções não tratadas no 2.0 é muito diferente do 1.1. diferente, 1.1 irá ignorá-lo, a menos que afete a geração de páginas. E o 2.0 fará com que o processo relate um erro, afetando diretamente o funcionamento de todo o site. Parece um problema sério, mas parece mais razoável, caso contrário os programadores continuarão a ignorar este erro. No entanto, devido a este problema, a incapacidade de mudar de site também é um problema sério, portanto, um método de transição suave ainda é necessário. Conforme mencionado acima, este método consiste em escrever você mesmo um HttpModule para lidar com todas as exceções não tratadas e registrar informações de exceção em eventos do sistema, o que é benéfico para o processamento dos programadores. E o download do código-fonte e do arquivo binário deste HttpModule também é fornecido acima, incluindo o Demo WebApp.
Hoje finalmente entendi o método de compilação da versão 2.0 de pré-implantação. É errado usar o VS para publicar o site. Você deve usar aspnet_compiler.exe para compilar manualmente, e seu processo de compilação é baseado nas configurações reais do site. Em outras palavras, você deve carregar o conteúdo do projeto da Web para o site, definir o caminho do site no IIS e, em seguida, usar aspnet_compile para compilar. Esse processo realmente coloca a dll gerada em C:. aqueles no diretório de cache em WindowsMicrosoft.Net são exatamente os mesmos gerados por csc.exe quando o usuário realmente acessa a página. Após esta etapa, nenhuma ação de compilação ocorrerá quando o usuário visitar duas vezes.
Tão cansado. A propósito, pensei em um método de troca contínua, mantendo dois sites apontando para dois diretórios diferentes, um dos quais não possui cabeçalho de host e o outro possui cabeçalho de host para atualização. Depois de atualizar o site com o cabeçalho do host, use aspnet_compiler para compilá-lo e, em seguida, troque os cabeçalhos do host dos dois sites, para que os usuários recém-visitados sejam direcionados para o site recém-compilado e o usuário não sinta nenhum atraso. Basta atualizar outro site na próxima vez.
http://www.cnblogs.com/unfish/archive/2006/09/10/500230.html