Quando você compila sua aplicação tem duas opções, compilar em modo debug ou modo release (Caso não saiba, essa opção fica ao lado do botão Start Debuggin, o "play").
A idéia é compilar em modo debug enquanto estiver desenvolvendo e depurando a aplicação, e em modo release quando for colocar o aplicativo em produção , pois para depurar o executável, o compilador precisa embutir nele algumas informações extras, como nome do arquivo fonte e número da linha. Como você dificilmente irá depurar diretamente o aplicativo em produção, essas informações podem ser removidas para otimizar o aplicativo.
Além dessa otimização que o próprio compilador faz, o próprio programador pode especificar uma determinada parte do código que só será executada em um modo específico. Por exemplo, você quer escrever uma rotina de tratamento de erros que não mostre a mensagem de erro original para o usuário, pode fazer algo do tipo:
try
{
// Código
}
catch(Exception ex)
{
#if DEBUG
MessageBox.Show(ex.Message);
#else
MessageBox.Show("Ocorreu um erro no sistema!");
#endif
}
No código acima , o primeiro comando MessageBox será executado se o programa for compilado em modo DEBUG, e o segundo se a aplicação for compilada em modo Release.
Além disse, você pode usar o Atributo Conditional para excluir uma determinada função do modo release. Se você declarar uma função dessa forma :
[System.Diagnostics.Conditional("DEBUG")]
private void Funcao()
Essa função só será considerada se estiver em modo DEBUG, caso contrário , será ignorada. A vantagem nesse caso, é que você não precisa alterar os pontos do códigos que chamam a função, somente a própria função.
Apresentarei nesse blog artigos relacionados à programação em .Net e desenvolvimento de software em geral. Se você quiser fazer alguma correção, sugestão, observação ou tiver alguma dúvida, sinta-se à vontade para postar um comentário.
quarta-feira, 13 de junho de 2007
terça-feira, 12 de junho de 2007
Stopwatch
Existe uma classe simples mas útil no namespace System.Diagnostics chamada Stopwatch. Essa classe simula um cronômetro e pode ser usada, por exemplo, para medir o tempo gasto por determinada operação. Por exemplo, você quer saber quanto tempo determinada função está demorando para executar, pode fazer isso:
Stopwatch sw = new Stopwatch();
sw.Start();
OperacaoDemorada();
sw.Stop();
Debug.WriteLine("Tempo gasto : " + sw.ElapsedMilliseconds.ToString() + " ms");
O código acima irá mostrar o tempo gasto em milisegundos, mas a classe também possui a propriedade Elapsed, que retorna um TimeSpan, permitindo a obtenção do tempo na unidade que você quiser.
Stopwatch sw = new Stopwatch();
sw.Start();
OperacaoDemorada();
sw.Stop();
Debug.WriteLine("Tempo gasto : " + sw.ElapsedMilliseconds.ToString() + " ms");
O código acima irá mostrar o tempo gasto em milisegundos, mas a classe também possui a propriedade Elapsed, que retorna um TimeSpan, permitindo a obtenção do tempo na unidade que você quiser.
domingo, 3 de junho de 2007
Acessando uma classe .Net via COM
A frequência de atualização desse blog tem sido baixa, mas ele ainda vive...rs. Vou tentar atualizá-lo com mais frequência. Dica: Para você saber quando há uma atualização, utilize um leitor RSS, como o FeedReader: http://www.feedreader.com/
Agora ao artigo.
Quem já trabalhou com ASP ou VB (os antigos, não-.Net), provavelmente já usou um comando como esse:
set obj = CreateObject("Dundas.Upload")
Deixando erros de sintaxe de lado (Escrevi só como exemplo, vai), esse comando permite criar objetos COM para acessar em sua aplicação. Você sabia que é possível chamar uma classe .NET dessa forma?
A vantagem é que com isso é possível acessar uma dll em .Net de uma aplicação ASP tradicional, VB 6 ou qualquer outra plataforma que suporte COM. Isso pode facilitar a transição parcial de um sistema para a plataforma .Net.
Passarei aqui as instruções para o Visual Studio 2005, mas isso também é possível no 2003. Em primeiro lugar é necessário adicionar uma strong name key ao seu projeto. Caso não saiba como fazer isso, procure por Strong Name Key no google que deve achar bastante coisa sobre o assunto. Também é necessário que todas as DLLs às quais a sua faça referência tenham um strong name key. Agora é só compilar e registrar a DLL.
Para registrá-la, use o utilitário de linha de comando Regasm.exe , com a seguinte sintaxe :
RegAsm.exe NomeDoArquivo.dll /tlb /codebase
Não sei te dizer exatamente o que fazem os parâmetro /tlb e /codebase, mas sei que sem eles não funciona :P (Quem souber e quiser explicar, fique a vontade e poste um comentário. ;) ). Como qualquer outro utilitário do .Net, o RegAsm.exe está na pasta do framework (e pode ser acessado diretamente se utilizado o atalho para o prompt de comando criado pelo visual studio no menu iniciar).
Após registrada a DLL, é só acessá-la do ASP ou VB como se fosse um objeto COM. Na string de identificação da classe, use o namespace seguido do nome da classe. No exemplo abaixo , está sendo chamada a classe TesteCOM do namespace Br1.Library.Teste:
set obj = CreateObject("Br1.Library.Teste.TesteCOM").
Algumas observações importantes:
Agora ao artigo.
Quem já trabalhou com ASP ou VB (os antigos, não-.Net), provavelmente já usou um comando como esse:
set obj = CreateObject("Dundas.Upload")
Deixando erros de sintaxe de lado (Escrevi só como exemplo, vai), esse comando permite criar objetos COM para acessar em sua aplicação. Você sabia que é possível chamar uma classe .NET dessa forma?
A vantagem é que com isso é possível acessar uma dll em .Net de uma aplicação ASP tradicional, VB 6 ou qualquer outra plataforma que suporte COM. Isso pode facilitar a transição parcial de um sistema para a plataforma .Net.
Passarei aqui as instruções para o Visual Studio 2005, mas isso também é possível no 2003. Em primeiro lugar é necessário adicionar uma strong name key ao seu projeto. Caso não saiba como fazer isso, procure por Strong Name Key no google que deve achar bastante coisa sobre o assunto. Também é necessário que todas as DLLs às quais a sua faça referência tenham um strong name key. Agora é só compilar e registrar a DLL.
Para registrá-la, use o utilitário de linha de comando Regasm.exe , com a seguinte sintaxe :
RegAsm.exe NomeDoArquivo.dll /tlb /codebase
Não sei te dizer exatamente o que fazem os parâmetro /tlb e /codebase, mas sei que sem eles não funciona :P (Quem souber e quiser explicar, fique a vontade e poste um comentário. ;) ). Como qualquer outro utilitário do .Net, o RegAsm.exe está na pasta do framework (e pode ser acessado diretamente se utilizado o atalho para o prompt de comando criado pelo visual studio no menu iniciar).
Após registrada a DLL, é só acessá-la do ASP ou VB como se fosse um objeto COM. Na string de identificação da classe, use o namespace seguido do nome da classe. No exemplo abaixo , está sendo chamada a classe TesteCOM do namespace Br1.Library.Teste:
set obj = CreateObject("Br1.Library.Teste.TesteCOM").
Algumas observações importantes:
- Isso obviamente não elimina a necessidade do Framework, ele deve estar instalado na máquina onde o objeto COM for executado.
- A DLL chamará as outras como qualquer objeto .Net, então as dlls às quais ela faz referência devem estar ou no mesmo diretório ou no GAC.
- Só consegui fazer funcionar a DLL com tipos primitivos nos parâmetros e retorno. Internamente podem ser usadas classes e structs sem problema, mas a função que será chamada externamente só poder receber e retornar tipos primitivos, como string ou int.
- Como qualquer objeto COM, depois da primeira chamada, a DLL vai estar carregada na memória. Portanto, para substituir a DLL pode ser necessário reiniciar o ISS. Sugiro registrar a DLL de outro local, para não dar erro quando o VS não conseguir compilá-la devido à dll em bin\debug estar em uso. Sugiro criar um .BAT para a atualização, com os seguintes passos:
- Reiniciar o iis (use o iisreset.exe)
- Desregistrar a DLL com o comando : Regasm.exe NomeDoArquivo.dll /unregister
- Excluir os arquivos .DLL e .PDB do diretório de registro.
- Copiar os arquivos .DLL e .PDB do diretório bin\debug (ou bin\release, se preferir)
- Registrar a DLL novamente com o comando que já passei.
Essa abordagem pode ser bem interessante para ir convertendo aos poucos um sistema para .Net, ou então para incrementar um sistema já existente.
quarta-feira, 30 de maio de 2007
[Off-Topic] Microsoft Surface
Não é relacionado com programação diretamente, mas aposto que vão gostar. É um futuro produto da microsoft que parece ser muito interessante. Um computador cuja tela fica na horizontal , como uma mesa, por exemplo, e é controlado totalmente por touchscreen.
Para copiar músicas para um Mp3 player , por exemplo, coloca-se o aparelho em cima da tela e arrasta-se as músicas para ele. Fica bem melhor vendo, Assistam os vídeos.
http://www.microsoft.com/surface/
Para copiar músicas para um Mp3 player , por exemplo, coloca-se o aparelho em cima da tela e arrasta-se as músicas para ele. Fica bem melhor vendo, Assistam os vídeos.
http://www.microsoft.com/surface/
sábado, 12 de maio de 2007
Tratamento de erros: Tratando e registrando erros
Nesse artigo vou falar sobre o tratamento de erros e registro dos mesmos. Anteriormente escrevi outros artigos sobre o object Exception e o tratamento de erros no .Net :
http://br1dev.blogspot.com/2007/04/tratamento-de-erros-objeto-exception.html
http://br1dev.blogspot.com/2007/04/tratamento-de-erros-objeto-exception_10.html
http://br1dev.blogspot.com/2007/04/tratamento-de-erros-objeto-exception_16.html
Agora vamos ao artigo:
Um fator que melhora a confiabilidade da sua aplicação é a maneira com ela trata os erros que ocorrem durante sua execução. É claro que o ideal é evitar o máximo possível que erros ocorram, mas é necessário que a aplicação se recupere adequadamente quando um erro ocorrer. Achar que sua aplicação está segura e não terá erros, e por isso abrir mão de um tratamento adequado, pode expor sua aplicaçõe a riscos de segurança e integridade da aplicação.
Sempre que um erro ocorrer na aplicação, são importantes os seguintes procedimentos:
http://br1dev.blogspot.com/2007/04/tratamento-de-erros-objeto-exception.html
http://br1dev.blogspot.com/2007/04/tratamento-de-erros-objeto-exception_10.html
http://br1dev.blogspot.com/2007/04/tratamento-de-erros-objeto-exception_16.html
Agora vamos ao artigo:
Um fator que melhora a confiabilidade da sua aplicação é a maneira com ela trata os erros que ocorrem durante sua execução. É claro que o ideal é evitar o máximo possível que erros ocorram, mas é necessário que a aplicação se recupere adequadamente quando um erro ocorrer. Achar que sua aplicação está segura e não terá erros, e por isso abrir mão de um tratamento adequado, pode expor sua aplicaçõe a riscos de segurança e integridade da aplicação.
Sempre que um erro ocorrer na aplicação, são importantes os seguintes procedimentos:
- Recuperar o sistema - Sempre que possível, o sistema deve retornar ao estado em que estava antes da execução da operação que gerou o erro. Um exemplo clássico disso. Você confirma o recebimento de uma pedido de venda. A operação atualiza o estoque , mas quando tenta alterar o status do pedido , ocorre um erro. Se o estoque não for retornado ao estado anterior, o usuário pode tentar repetir a operação (Afinal , para ele houve um erro e a operação não foi concluída) e o estoque será alterado novamente, ficando com valores errados.
- Informar o usuário - Evite esconder um erro, não mostrando ao usuário que houve um erro. Exceto em casos específicos, é sempre importante avisar o usuário que o sistema não se comportou da forma esperada, para que ele possa corrigir o problema ou pelos contatar o suporte. Entretanto, uma mensagem do tipo "Object reference not set to an instance of an object" não ajuda em nada o usuário. O ideal é mostrar ao usuário uma mensagem padrão, do tipo "Ocorreu um erro no sistema, contato o suporte técnico etc.", ou então alguma coisa que realmente o ajude a solucionar o problema.
- Registrar o erro - Se por um lado não é interessante mostrar ao usuário detalhes do erro, também não é uma boa ignorar esses detalhes por completo. O ideal é registrar a mensagem original do erro, e todos os outros detalhes possíveis a fim de auxiliar a correção do erro pelos desenvolvedores. Devem ser registradas informações como a pilha de chamadas, que mostra toda a cadeia de chamada de métodos até chegar no local do erro, o nome do erro (ArgumentException, por exemplo) e quaisquer outras informações que estejam disponíveis. Você sabia que com o objeto SQLExcetion é possível obter as mesmas informações que aparecem quando você executa a procedure ou comando no Query Analyzer?. Outra informação importante é a InnerException. No terceiro artigo que mencionei no começa desse post falo mais sobre ela. Para registrar o erro você poderia gravar em um arquivo texto, um arquivo XML, enviar por email ou gravar em um banco de dados. O importante é escolher o mecanismo que torne mais fácil o acesso a essas informações.
Pra finalizar, você poderia tornar esse tratamento mais fácil criando uma função que recebe o objeto Exception e faça o registro e exibição da mensagem referente ao mesmo. Aí, é só chamar a função em todo bloco catch da aplicação.
quinta-feira, 3 de maio de 2007
[Off-Topic] Google AdSense
Esperava mais do Google AdSense. Achei que ele mostrava propagandas que tivessem relação com o conteúdo do site, mas no meu blog só tá mostrando anúncios para se livrar do alcoolismo e propagandas de Fossas Sépticas! :
Começando em .Net e C#
Desculpem pela demora na postagem, as coisas estão meio corridas pra mim ultimamente.
De vez em quando vejo emails em listas de discussão, ou mesmo alguém me pergunta como começar no .Net . Resolvi então colocar algumas instruções .
Em primeiro lugar, o .Net fornece uma estrutura para o desenvolvimento e execução de aplicações gerenciadas. Gerenciada porque durante a execução da aplicação, o framework controla alguns recursos que a aplicação utiliza, como conexão com o banco de dados e memória utilizada.
Aplicações para esse framework podem ser criadas em diversas linguagens, sendo as principais, que são suportadas pela Microsoft são o C# e o VB.Net. A diferença entre essas duas linguagens é apenas na sintaxe. Todos os recursos do Framework estão disponíveis para qualquer linguagem, então escolha a que melhor agradar. Minha sugestão, aprenda as duas. Não é algo difícil, afinal a base é a mesma, e você terá muito mais flexibilidade profissionalmente.
O Importante então, é aprender o framework, sua estrutua principal.
Um bom lugar pra começar é Programa Desenvolvedor 5 estrelas. Esse programa consiste em uma série de treinamentos, na forma de apresentações com narração, que você pode baixar e estudar. São 3 estrelas principais (as duas últimas se referem à certificação). Cada nível possui um grau diferente de dificuldade e possuem provas online para se certificar que você assimilou o conteúdo do nível (não vale colar, hein :) ) . Acho que não preciso dizer que o ideal é começar do nível 1, e quando tiver dominado os conceitos apresentados, partir para o nível seguinte.
Endereço : http://www.msdnbrasil.com.br/cinco_estrelas/#Treinamento
Depois de ter estudado o programa acima, dê uma olhada no link abaixo, que possui alguns tutoriais interessantes para quem está começando. Ou mesmo para quem já conhece alguma coisa e quer saber algo mais sobre Datagrids, por exemplo.
Endereço : http://www.microsoft.com/brasil/msdn/Tutoriais/default.mspx
Quando estiver um pouco mais experientes, dê uma olhada nos Webcasts da microsoft. Para quem não sabe, webcast é uma apresentação online, onde você além de assitir a apresentação de slides, ouve o apresentador falando e, pelo menos em alguns casos, pode fazer perguntas a ele. Além disso, depois da realização do webcast, você pode fazer o download da apresentação para assistir depois . Claro que nesse caso não vai conseguir perguntar, a não ser que mande um email pro cara. :)
Endereço : http://www.microsoft.com/brasil/msdn/Eventos/Webcasts.mspx
Bom, é isso. Claro que há muito mais material disponível, mas com esses já dá para ser introduzido (sem duplo sentido, por favor) no mundo .Net. É importante que durante seu estudo, na medida do possível, você ponha a mão na massa. Crie programas que apliquem o que você estudou, assim irá fixar e aprender bem melhor.
E sempre haverá o Google ;)
Endereço: Precisa? Tá bom : http://www.google.com.br
De vez em quando vejo emails em listas de discussão, ou mesmo alguém me pergunta como começar no .Net . Resolvi então colocar algumas instruções .
Em primeiro lugar, o .Net fornece uma estrutura para o desenvolvimento e execução de aplicações gerenciadas. Gerenciada porque durante a execução da aplicação, o framework controla alguns recursos que a aplicação utiliza, como conexão com o banco de dados e memória utilizada.
Aplicações para esse framework podem ser criadas em diversas linguagens, sendo as principais, que são suportadas pela Microsoft são o C# e o VB.Net. A diferença entre essas duas linguagens é apenas na sintaxe. Todos os recursos do Framework estão disponíveis para qualquer linguagem, então escolha a que melhor agradar. Minha sugestão, aprenda as duas. Não é algo difícil, afinal a base é a mesma, e você terá muito mais flexibilidade profissionalmente.
O Importante então, é aprender o framework, sua estrutua principal.
Um bom lugar pra começar é Programa Desenvolvedor 5 estrelas. Esse programa consiste em uma série de treinamentos, na forma de apresentações com narração, que você pode baixar e estudar. São 3 estrelas principais (as duas últimas se referem à certificação). Cada nível possui um grau diferente de dificuldade e possuem provas online para se certificar que você assimilou o conteúdo do nível (não vale colar, hein :) ) . Acho que não preciso dizer que o ideal é começar do nível 1, e quando tiver dominado os conceitos apresentados, partir para o nível seguinte.
Endereço : http://www.msdnbrasil.com.br/cinco_estrelas/#Treinamento
Depois de ter estudado o programa acima, dê uma olhada no link abaixo, que possui alguns tutoriais interessantes para quem está começando. Ou mesmo para quem já conhece alguma coisa e quer saber algo mais sobre Datagrids, por exemplo.
Endereço : http://www.microsoft.com/brasil/msdn/Tutoriais/default.mspx
Quando estiver um pouco mais experientes, dê uma olhada nos Webcasts da microsoft. Para quem não sabe, webcast é uma apresentação online, onde você além de assitir a apresentação de slides, ouve o apresentador falando e, pelo menos em alguns casos, pode fazer perguntas a ele. Além disso, depois da realização do webcast, você pode fazer o download da apresentação para assistir depois . Claro que nesse caso não vai conseguir perguntar, a não ser que mande um email pro cara. :)
Endereço : http://www.microsoft.com/brasil/msdn/Eventos/Webcasts.mspx
Bom, é isso. Claro que há muito mais material disponível, mas com esses já dá para ser introduzido (sem duplo sentido, por favor) no mundo .Net. É importante que durante seu estudo, na medida do possível, você ponha a mão na massa. Crie programas que apliquem o que você estudou, assim irá fixar e aprender bem melhor.
E sempre haverá o Google ;)
Endereço: Precisa? Tá bom : http://www.google.com.br
Assinar:
Postagens (Atom)