Fórum Diferenças no modo debug e release #383619
13/08/2010
0
Pessoal,
Desenvolvi uma funcionalidade na aplicação que, ao executar pelo Visual Studio, no modo Debug, a aplicação funciona direitinho. Ao publicar a aplicação no modo Release e distribuir no servidor, a aplicação começa a gerar diversos problemas.
A funcionalidade é a seguinte: tem uma página com o FileUpload, que o cara seleciona um arquivo Excel. Quando ele aciona o botão "Importar", abro o arquivo Excel com OleDbConnection, faço a leitura das abas que eu desejo, seto minha classe com as propriedades que preciso e depois disso, insiro no banco.
Pelo Visual Studio, no meu arquivo de log não foi gerado nada. Pelo servidor, ele gera vários erros como objeto não foi referenciado (quando você vai instanciar um objeto), gera exceção FormatException, e por ai vai.
Na planilha anterior que estava fazendo testes ele até estava gerando algumas exceções mesmo, mas ai fui tratando e chegou uma hora pelo Visual Studio que estava tudo redondo. A impressão que dá é que no servidor pelos meus testes, ele ainda está considerando dados da planilha com erro, sabe?
Tentei limpar o cache da minha máquina, reiniciei minha máquina, reiniciei o IIS, reiniciei o servidor, mas nada, continua a mesma coisa.
Algúem já passou por isso? Podem em ajudar?
Carlos Nogueira
Curtir tópico
+ 0
Responder
Posts
13/08/2010
Luiz Maia
Carlos,
Realmente nunca vi isto acontecer. Dê uma olhada no artigo abaixo e tente re-gerar (rebuild) sua aplicação. Depois gere o Publish novamente e publique no IIS.
COMPILAR A APLICAÇÃO EM MODO DEBUG OU RELEASE
INTRODUÇÃO
Logo depois de finalizado o programa devemos nos preocupar com a distribuição. A distribuição pode ser feita de várias maneiras, via web, com arquivo de instalação, ou utilizando a nova tecnologia do Visual Studio 2005, o ClickOnce. Em qualquer um dos casos devemos tomar cuidado para distribuir a aplicação corretamente, ou seja, depois de finalizado o trabalho de debug e feito todos os testes devemos gerar a versão para distribuição também conhecida como Release. Neste artigo vou explicar a diferença entre a versão de desenvolvimento Debug e a versão para distribuição Release, e os cuidados que devem ser tomados no momento de escolher o executável para distribuição.
Modos de Compilação
O Visual Studio .NET desde as primeiras versões disponibiliza dois modos de compilação. O modo Debug e o modo Release.
Modo Debug
O modo Debug é uma versão do programa que é compilada com a informação completa dos símbolos para debug e não é realizada nenhuma otimização. A otimização dificulta o debug, já que a relação entre o código fonte e as instruções geradas são mais complexas. Por não ter a otimização o programa se torna mais lento.
Modo Release
O modo Release é uma versão do programa que é totalmente otimizada e não contêm nenhuma informação dos símbolos para debug. Isto torna o software mais leve e muito mais rápido. E é a versão que deve ser distribuída para o cliente final.
Como Configurar o Modo de Compilação
O local e a forma para selecionar o modo de compilação foi ligeiramente modificado entre as versões 2003 e 2005 do Visual Studio.
No Visual Studio 2003 para selecionar o modo de compilação você deveria com o seu projeto aberto, selecionar o modo de compilação através do menu BUILD - CONFIGURATION MANAGER (Figura 1) ou através da barra de ferramentas no item Solution Configurations para selecionar entre o modo Debug e o modo Release (Figura 2).
Figura 1 - Configuration Manager do Visual Studio 2003
Figura 2 - Barra de Ferramentas com o atalho do modo de debug no Visual Studio 2003
No Visual Studio 2005 o modo de compilação é definido automaticamente na IDE do Visual Studio de acordo com o menu que for selecionado. Quando você inicializa o Visual Studio 2005 pela primeira vez, o Visual Studio apresenta uma caixa de diálogo onde você deve selecionar a linguagem de programação principal.
Se for selecionado o Visual Basic, as ferramentas para a configuração do modo de compilação, se Debug ou Release, não aparece mais na barra de ferramentas e nem no menu BUILD.
Ao invés disso, o Visual Studio escolhe o modo de compilação de acordo com a forma de execução que você estiver usando, ou seja, se for selecionado o menu DEBUG - START DEBUGGING, o modo de compilação será o Debug. Se for selecionado o menu BUILD - BUILD NomeDoProjeto, o modo de compilação será o Release.
Podemos verificar facilmente esta característica na IDE do Visual Studio. Para isso vamos criar um projeto Windows Application no Visual Studio 2005 que exibe o diretório da aplicação. É uma aplicação bem simples, a idéia e demonstrar os modos de compilação.
Para criar o projeto abra o Visual Studio 2005 e selecione o menu FILE - NEW PROJECT. Selecione o template Windows Application com a linguagem de programação Visual Basic. Altere o nome do projeto para Compilação.
Insira um botão no Form1 e configure a propriedade Name como btnDiretorio e a propriedade Text como Diretório. Insira um Label no Form1 e configure as propriedades Name como lblDiretorio e a propriedade AutoSize como False. No evento Click do botão insira o seguinte código:
Private Sub btnDiretorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDiretorio.Click
lblDiretorio.Text = "O executável está no diretório: " & Application.ExecutablePath
End Sub Rode a aplicação selecionando o menu DEBUG - START DEBUGGING e clique no botão Diretório. Observe na Figura 3 que o diretório apresentado é o diretório da aplicação onde o executável está localizado na pasta Debug. Este executável possui todos os símbolos para o debug e não está otimizado. Figura 3 - Aplicação executado no diretório Debug Observe no Solution Explorer quando selecionamos a visualização de todos os arquivos existe a pasta Debug e a Release (Figura 4). Na pasta Debug encontramos o executável bem como os arquivos necessários para o debug da aplicação pelo Visual Studio. Na pasta Release não existe nenhum arquivo, pois ainda não foi feito o Build do projeto. Figura 4 - Solution Explorer Debug Na pasta debug além do arquivo executável (.exe), temos o arquivo responsável pelo processo de debug no Visual Studio 2005 (.vshost.exe) e o arquivo (.pdb). O arquivo do processo de debug sempre tem o nome do projeto com a extensão (.vshost.exe). Este arquivo é uma característica do Visual Studio 2005 que melhora a performance do processo de debug. Habilita o debug parcialmente confiável e habilita a avaliação das expressões em tempo de desenvolvimento. Este arquivo não deve ser distribuído com a aplicação. A melhora da performance do processo de debug é adquirida através da criação de um domínio da aplicação e a associação do debugger em um processo de background. Este arquivo também armazena informações do estado de debug entre as execuções da aplicação e permite que sejam avaliadas expressões na Janela Immediate sem a necessidade de rodar a aplicação. Por exemplo, faça a seguinte declaração no seu código: Dim i As Integer
Dim j As Integer
Dimk As Integer
k = i + j Veja como podemos avaliar a expressão i + j (Figura 5) na Janela Immediate (Para acessar a Janela Immediate selecione o menu DEBUG - WINDOWS-IMMEDIATE), sem rodar a aplicação: Figura 5 - Immediate Window O arquivo com a extensão (.pdb) é o arquivo de banco de dados do programa, ele armazena as informações do estado do programa e de debug. Um arquivo PDB é criado quando se faz o Build do programa. Existem duas formas de se criar o arquivo PDB, usando a compilação com comando de linha com as opções /debug:full ou /debug:pdbonly, ou usar o ambiente do Visual Studio selecionando o menu PROJECT-PRJCOMPILACAO PROPERTIES. Quando as propriedades do projeto forem apresentadas, selecione a aba Debug e clique no botão ADVANCED COMPILED OPTIONS (Figura 6) Figura 6 - Advanced Compiled Options Observe que temos a opção none, Full e pdbonly. A opção Full deve ser utilizada para gerar o código para debug. A opção pdbonly gera PDBs, mas não gera as informações de debug, pode ser usado na versão Release quando não queremos que o programa tenha a opção de debug. Agora vamos compilar o projeto para distribuição, neste caso selecione o menu BUILD-BUILD PRJCOMPILACAO. Observe na Figura 5 a pasta Release, que temos o arquivo .Exe e o arquivo.pdb. Figura 7 - Solution Explorer com a pasta Release Uma última observação cuidado quando for usar a publicação via ClickOnce, pois o Visual Studio vai selecionar automaticamente o último executável que foi gerado, portanto se você acabou o debug e não fez o Build do seu projeto, o executável selecionado será a versão debug. Por isso sempre que finalizar o projeto faça o Build para gerar a versão Release do seu projeto. Versão da Aplicação no Visual Studio Durante o build do projeto o Visual Studio configura automaticamente a versão da sua aplicação. Verifique se no arquivo AssemblyInfo.vb o atributo AssemblyVersion está configurado como indicado abaixo: <Assembly: AssemblyVersion("1.0.*")> Se estiver significa que a sua aplicação vai ter como versão quatro números separados por ponto no seguinte formato e incrementados automaticamente pelo Visual Studio, caso contrário o versionamento do assembly terá que ser feito manualmente. <Versão Maior>.<Versão Menor>.<Número do Build>.<Revisão> sendo: - Versão Maior: o primeiro dígito do AssemblyVersion, no exemplo acima 1 - Versão Menor: o segundo dígito do AssemblyVersion, no exemplo acima 0 - Número do Build: Número de dias a partir de uma data inicial randômica. Este valor é incrementado por dia. - Revisão: Baseado no número de segundos desde a meia-noite. Você pode configurar cada parte manualmente, para isso no arquivo AssemblyInfo.vb no atributo AssembyVersion configure a versão desejada, por exemplo: <Assembly: AssemblyVersion("1.0.2.1")> OBSERVAÇÃO: Para o Visual Basic .NET com o AssemblyVersion configurado para 1.0.*, a versão do assembly somente é atualizada a primeira vez que for feito o Rebuild dentro do Visual Studio. O número da versão permanece constante durante os rebuilds subsequentes dentro da mesma instância do Visual Studio .NET. Isto não representa um problema porque a versão do assembly é utilizada como informação somente em assemblies que não tem strong name. Para assemblies que possuem um strong name deve ser evitada a utilização de versão no formato 1.0.*, deve ser utilizada a forma manual de versionamento descrito acima. CONCLUSÃO Como pudemos observar no Visual Studio 2005 o modo de compilação é selecionado automaticamente, de acordo com a evolução do seu projeto, ou seja, enquanto estiver projetando use o menu DEBUG, quando for gerar a versão de distribuição use o menu BUILD e não esqueça de verificar qual a melhor forma de configurar a versão da aplicação, se manual ou automática.
End Sub Rode a aplicação selecionando o menu DEBUG - START DEBUGGING e clique no botão Diretório. Observe na Figura 3 que o diretório apresentado é o diretório da aplicação onde o executável está localizado na pasta Debug. Este executável possui todos os símbolos para o debug e não está otimizado. Figura 3 - Aplicação executado no diretório Debug Observe no Solution Explorer quando selecionamos a visualização de todos os arquivos existe a pasta Debug e a Release (Figura 4). Na pasta Debug encontramos o executável bem como os arquivos necessários para o debug da aplicação pelo Visual Studio. Na pasta Release não existe nenhum arquivo, pois ainda não foi feito o Build do projeto. Figura 4 - Solution Explorer Debug Na pasta debug além do arquivo executável (.exe), temos o arquivo responsável pelo processo de debug no Visual Studio 2005 (.vshost.exe) e o arquivo (.pdb). O arquivo do processo de debug sempre tem o nome do projeto com a extensão (.vshost.exe). Este arquivo é uma característica do Visual Studio 2005 que melhora a performance do processo de debug. Habilita o debug parcialmente confiável e habilita a avaliação das expressões em tempo de desenvolvimento. Este arquivo não deve ser distribuído com a aplicação. A melhora da performance do processo de debug é adquirida através da criação de um domínio da aplicação e a associação do debugger em um processo de background. Este arquivo também armazena informações do estado de debug entre as execuções da aplicação e permite que sejam avaliadas expressões na Janela Immediate sem a necessidade de rodar a aplicação. Por exemplo, faça a seguinte declaração no seu código: Dim i As Integer
Dim j As Integer
Dimk As Integer
k = i + j Veja como podemos avaliar a expressão i + j (Figura 5) na Janela Immediate (Para acessar a Janela Immediate selecione o menu DEBUG - WINDOWS-IMMEDIATE), sem rodar a aplicação: Figura 5 - Immediate Window O arquivo com a extensão (.pdb) é o arquivo de banco de dados do programa, ele armazena as informações do estado do programa e de debug. Um arquivo PDB é criado quando se faz o Build do programa. Existem duas formas de se criar o arquivo PDB, usando a compilação com comando de linha com as opções /debug:full ou /debug:pdbonly, ou usar o ambiente do Visual Studio selecionando o menu PROJECT-PRJCOMPILACAO PROPERTIES. Quando as propriedades do projeto forem apresentadas, selecione a aba Debug e clique no botão ADVANCED COMPILED OPTIONS (Figura 6) Figura 6 - Advanced Compiled Options Observe que temos a opção none, Full e pdbonly. A opção Full deve ser utilizada para gerar o código para debug. A opção pdbonly gera PDBs, mas não gera as informações de debug, pode ser usado na versão Release quando não queremos que o programa tenha a opção de debug. Agora vamos compilar o projeto para distribuição, neste caso selecione o menu BUILD-BUILD PRJCOMPILACAO. Observe na Figura 5 a pasta Release, que temos o arquivo .Exe e o arquivo.pdb. Figura 7 - Solution Explorer com a pasta Release Uma última observação cuidado quando for usar a publicação via ClickOnce, pois o Visual Studio vai selecionar automaticamente o último executável que foi gerado, portanto se você acabou o debug e não fez o Build do seu projeto, o executável selecionado será a versão debug. Por isso sempre que finalizar o projeto faça o Build para gerar a versão Release do seu projeto. Versão da Aplicação no Visual Studio Durante o build do projeto o Visual Studio configura automaticamente a versão da sua aplicação. Verifique se no arquivo AssemblyInfo.vb o atributo AssemblyVersion está configurado como indicado abaixo: <Assembly: AssemblyVersion("1.0.*")> Se estiver significa que a sua aplicação vai ter como versão quatro números separados por ponto no seguinte formato e incrementados automaticamente pelo Visual Studio, caso contrário o versionamento do assembly terá que ser feito manualmente. <Versão Maior>.<Versão Menor>.<Número do Build>.<Revisão> sendo: - Versão Maior: o primeiro dígito do AssemblyVersion, no exemplo acima 1 - Versão Menor: o segundo dígito do AssemblyVersion, no exemplo acima 0 - Número do Build: Número de dias a partir de uma data inicial randômica. Este valor é incrementado por dia. - Revisão: Baseado no número de segundos desde a meia-noite. Você pode configurar cada parte manualmente, para isso no arquivo AssemblyInfo.vb no atributo AssembyVersion configure a versão desejada, por exemplo: <Assembly: AssemblyVersion("1.0.2.1")> OBSERVAÇÃO: Para o Visual Basic .NET com o AssemblyVersion configurado para 1.0.*, a versão do assembly somente é atualizada a primeira vez que for feito o Rebuild dentro do Visual Studio. O número da versão permanece constante durante os rebuilds subsequentes dentro da mesma instância do Visual Studio .NET. Isto não representa um problema porque a versão do assembly é utilizada como informação somente em assemblies que não tem strong name. Para assemblies que possuem um strong name deve ser evitada a utilização de versão no formato 1.0.*, deve ser utilizada a forma manual de versionamento descrito acima. CONCLUSÃO Como pudemos observar no Visual Studio 2005 o modo de compilação é selecionado automaticamente, de acordo com a evolução do seu projeto, ou seja, enquanto estiver projetando use o menu DEBUG, quando for gerar a versão de distribuição use o menu BUILD e não esqueça de verificar qual a melhor forma de configurar a versão da aplicação, se manual ou automática.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)