Remover os ficheiros gerados pelo Visual Studio, ReSharper, etc…

Durante o desenvolvimento de projectos, o Visual Studio cria uma série ficheiros temporários para guardar as preferências do utilizador para a solução e para cada um dos projectos (*.suo, *.user, *.cache), ficheiros com informações sobre o sistema de controlo de versões (*.scc, *.vssscc, *.vspscc), além das pastas com os ficheiros gerados durante a compilação e execução de testes (bin, obj, TestResults). Quem utiliza o ReSharper, tem ainda outra pasta com diversos ficheiros temporários (_ReSharper.*) e um ficheiro com preferências do utilizado para a solução (*.ReSharper.user), e o próprio Windows, em pastas que possuem imagens, cria ficheiros com as miniaturas das imagens da pasta (Thumbs.db).

Estes são todos ficheiros que não devemos guardar no sistema de controlo de versões justamente porque são específicos para cada utilizador e são recriados a partir do projecto em cada máquina e, por isso, quando preciso enviar um projecto para alguém (por exemplo, por e-mail), tenho o cuidado de apagar todos estes ficheiros temporários primeiro, para então criar um ficheiro .zip com o conteúdo da pasta do projecto e enviar apenas os ficheiros essenciais para que a outra pessoa consiga abrir o meu projecto/solução no Visual Studio, compilar e executar os testes unitários.

Por ser uma tarefa repetitiva e que faço com alguma frequência, durante muitos anos tive o hábito de manter um ficheiro .cmd na mesma pasta da solução para automatizar isto, mais ou menos assim:

CleanUp.cmd

del /s /f /ah *.suo
del /s /f     *.user
del /s /f     *.cache
del /s /f /ah *.cache
del /s /f     *.scc
del /s /f     *.vssscc
del /s /f     *.vspscc
rd  /s /q     bin obj TestResults
rd  /s /q     _ReSharper.Projecto

Esta solução é bastante simples e funcionou bem durante muito tempo, até que um dia assisti a apresentação do Bruno Lopes sobre PowerShell numa das reuniões da Comunidade NetPonto, onde pude ver o potencial da linguagem e fiquei com vontade de utilizar no meu dia-a-dia.

Desde então, cada vez que preciso escrever um ficheiro .cmd/.bat para automatizar alguma tarefa, tenho feito em PowerShell. Tem sido uma experiência bastante interessante e percebo que começo a ficar cada vez mais à vontade com a sintaxe e, como parte do aprendizado, decidi converter os meus ficheiros .cmd que utilizava para apagar os ficheiros gerados pelo Visual Studio, que mencionei acima, e este foi o resultado:

CleanUp.ps1 (ver gist)

#Lista de pastas que devem ser apagadas
$foldersToRemove =
	 "bin",
	 "obj",
	 "TestResults",
	 "_ReSharper.*"

#Lista ficheiros que devem ser apagados
$filesToRemove =
	"Thumbs.db",
	"*.suo",
	"*.user",
	"*.cache",
	"*.scc",
	"*.vssscc",
	"*.vspscc"

#---- Acção ----

#Apaga todas as pastas definidas na colecção acima
Get-ChildItem .\ -include $foldersToRemove -force -recurse |
	where { $_.PsIsContainer } |
	foreach ($_) {
		Write-Host "  A apagar a pasta ./$($_.Name)"
		Remove-Item $_.FullName -force -recurse
	}

#Apaga todos os ficheiros definidos na colecção acima
Get-ChildItem .\ -include $filesToRemove -force -recurse |
	foreach ($_) {
		Write-Host "  A apagar o ficheiro ./$($_.Name)"
		Remove-Item $_.FullName -force -recurse
	}

Write-Host "Pronto. Pressione qualquer tecla para fechar..."
[void][System.Console]::ReadKey($true)

Agora, quando quero executar esse script, posso optar por correr directamente via linha de comandos do PowerShell, ou então carregar com o botão direito no ficheiro no Windows Explorer e seleccionar “Run with PowerShell“:

A primeira impressão é que se está a utilizar mais linhas de código para fazer a mesma coisa, e em certa parte é verdade, no entanto este script PowerShell é mais poderoso e mais flexível que o script batch acima, por várias razões:

  • Para adicionar novas pastas ou ficheiros para serem apagados, basta adicionar novos itens na variável correspondente, sem ter de incluir novos comandos;
  • Não é preciso ter a preocupação de saber se os ficheiros ou pastas a serem apagados estão escondidos (attrib +h) como é o caso dos ficheiros *.cache no script batch;
  • É possível apagar pastas utilizando nomes parciais (Ex: _ReSharper.*) enquanto que no script batch era preciso conhecer o nome exacto da pasta, ou então programar um loop semelhante ao script PowerShell para percorrer as pastas e sub-pastas, o que tornaria o script batch mais complexo que o script PowerShell;
  • O cmdlet Get-ChildItem permite definir uma lista de exclusão de ficheiros, além da lista normal de inclusão (Ex: -exclude *.txt);
  • O cmdlet Get-ChildItem permite utilizar Regular Expressions na definição do filtro (Ex: {$_.Name -match “\d”});
  • Cada elemento retornado pelo cmdlet Get-ChildItem é um objecto .NET da classe FileSystemInfo, o que nos permite consultar todas as propriedades destes objectos e facilmente filtrar, por exemplo, pela data de criação (.CreationTime) ou data de alteração (.LastWriteTime) do ficheiro;
  • Temos acesso a qualquer classe do .NET a partir desse script, e podemos instanciar objectos. executar métodos, etc…

Outras alternativas

Alguns sistemas de controlo de versão possuem comandos que permitem atingir mais ou menos o mesmo resultado, por exemplo o Git possui o comando git clean, que permite remover os ficheiros que estão a ser ignorados (definido no ficheiro .gitignore), o Mercurial possui um comando semelhante hg purge, e o TortoiseSVN possui uma opção de menu “Delete unversioned files” que também serve o mesmo propósito: Remover os ficheiros que não estão a ser controlados pelo sistema de controlo de versões.

Estes comandos são muito úteis e também os utilizo ocasionalmente (no caso do Git, pelo menos), mas ainda continuo a utilizar os meus scripts PowerShell porque existem situações onde tenho ficheiros que não estou a controlar a versão, mas que desejo partilhar com outras pessoas e não quero que sejam apagados, como é o caso dos ficheiros XML com as opções de publicação dos projectos Web, por exemplo.

Uma outra alternativa é utilizar CleanProject, um pequeno utilitário gratuito desenvolvido pelo Ron Jacobs que integra-se com o Windows Explorer e com o Visual Studio e permite remover essas pastas e ficheiros criados pelo do Visual Studio e ReSharper, e ainda tem a opção de criar um .zip da pasta do projecto automaticamente.

Publicado em .NET | Tags , | Publicar um comentário

Slides e Código da apresentação de Acesso a Dados no WP7 ‘Mango’ Dev Hub

Os slides da apresentação que fiz sobre as novidades relacionadas com acesso a dados introduzidas no Windows Phone 7 “Mango” no evento Windows Phone 7 “Mango” Developer Hub no passado dia 29 de Junho estão disponíveis no SlideShare:

E o código-fonte de todas as demonstrações que fiz durante a apresentação está no GitHub:

Agradeço a Microsoft Portugal pelo convite e a todos que assistiram a apresentação e espero que tenham gostado! Um muito obrigado às pessoas que fizeram perguntas e tornaram a apresentação muito mais interessante.

Publicado em Apresentações, Eventos | Tags , , , , , , , | 1 Comentário

Revista PROGRAMAR: Edição 29 – Junho de 2011

Já está disponível a 29ª edição da Revista PROGRAMAR, uma publicação digital gratuita, com diversos artigos relacionados com desenvolvimento de software, e com uma nova edição a cada dois meses.

Revista PROGRAMAR 29 Esta edição traz como destaque um artigo sobre a utilização do Git escrito por mim (Look Ma!), e outros artigos também interessantes sobre Windows Azure, BizTalk Server, OpenXML SDK, certificações técnicas da Microsoft, entre outros.

Conteúdo desta edição

  • Tema de capa
    • Git – Controlo de Versões para Pequenos e Grandes Projectos
  • A Programar
    • LUA – Linguagem de Programação (Parte 9)
    • Introdução ao Cloud Computing e à Plataforma Windows Azure
    • Managed Extensibility Framework (MEF) e AJAX
    • Microsoft BizTalk Server aos olhos dos programadores
    • O Editor de texto VIM
  • Colunas
    • Core Dump: Fazer mal = Rápido?
    • Visual (Not) Basic: Introdução ao OpenXML SDK
  • Comunidades Técnicas
    • NetPonto – Certificações Microsoft

Download: Revista PROGRAMAR Edição 29 – Junho de 2011.

Publicado em Comunidades, Publicações | Tags , , , , , , , , | Publicar um comentário

Data Access Features in Mango @ WP7 “Mango” Dev Hub

Actualização (11-07-2011): Os slides e o código-fonte das demonstrações desta apresentação já estão disponíveis.

No dia 29 de Junho decorre o Windows Phone 7 “Mango” Developer Hub, o primeiro evento Microsoft totalmente dedicado ao novo Windows Phone 7 “Mango” (que está a chegar), e a todos os Developers que queiram desenvolver aplicações utilizando as grandes novidades desta actualização, como multitasking, Internet Explorer 9 (IE9) com HTML5, acesso a sensores e à câmera, base de dados SQL Server local e muitas outras novidades.

Windows Phone 7 Mango

O evento é gratuito e será realizado no auditório da Microsoft Portugal em Lisboa.

Neste dia, pelas 12:00, vou falar sobre as novidades relacionadas com acesso a dados introduzidas nesta actualização do Windows Phone 7 “Mango”, com diversas demonstrações práticas incluindo a criação de bases de dados locais com o SQL Server Compact e a utilização destas bases de dados via LINQ to SQL.

Portanto, se tem interesse em conhecer o que há de novo para acesso a dados no Windows Phone 7 “Mango” ou tem alguma questão sobre o tema, efectue o registo e assista a minha sessão! :)

A agenda para este evento será:

  • 09:30 – 10:30 – Mango is coming… But I’m a developer, why should I care? – Nuno Silva, Microsoft
  • 10:30 – 11:30 – What’s new for Silverlight and XNA in Mango? – Virgílio Raposo, Comunidade NetPonto
  • 11:30 – 12:00 – (Coffee-break)
  • 12:00 – 13:00 – Data Access Features in Mango – Caio Proiete, Ciclo Formação, Comunidade NetPonto
  • 13:00 – 14:30 – (Almoço Livre)
  • 14:30 – 16:00 – Multitasking Deep Dive – Nuno Silva, Microsoft
  • 16:00 – 16:30 – (Coffee-break)
  • 16:30 – 17:30 – Enhanced Push Notifications and Live Tiles – Nuno Godinho, itech4all, Comunidade AzurePT
  • 17:30 – 18:30 Camera and Sensors API – Pedro Lamas, Devscope

Registo: Windows Phone 7 “Mango” Developer Hub.

Publicado em Eventos | Tags , , , , , , | Publicar um comentário

Vídeo, Slides, e Código da apresentação de ASP .NET MVC 3 no ISEL Tech’11

A gravação em vídeo da apresentação que fiz sobre as novidades do ASP .NET MVC 3 no evento ISEL Tech’11 no passado dia 24 de Maio está disponível no Vimeo:

Video

Os slides da apresentação estão disponíveis no SlideShare:

Slides

E o código-fonte de todas as demonstrações que fiz durante a apresentação (inclusive a do “Polvo indeciso entre o Porto e o Benfica” que muitos pediram-me por e-mail) está no GitHub:

Código-fonte

Agradeço a organização do evento pelo convite e a todos que assistiram a apresentação e espero que tenham gostado! Um muito obrigado às pessoas que fizeram perguntas e tornaram a apresentação muito mais interessante, e obrigado também ao Bruno Lopes por ter gravado a apresentação em vídeo.

Publicado em Apresentações, Eventos | Tags , , , , , , , , , | 2 Comentários

Comunidade Portugal-a-Programar completa 6 anos!

A comunidade Portugal-a-Programar completou hoje 6 anos de existência! São muitos anos de trabalho e dedicação de diversos colaboradores voluntários, para conseguir criar uma comunidade de programadores na língua Portuguesa que cresce a cada dia.

Esta comunidade possui com um fórum on-line onde os membros podem enviar e responder questões sobre desenvolvimento de software em diferentes linguagens de programação e plataformas de desenvolvimento, uma wiki onde são publicados artigos e code-snippets de forma colaborativa, e também produzem a Revista PROGRAMAR, uma publicação digital gratuita com diversos artigos relacionados com desenvolvimento de software, com uma nova edição a cada dois meses.

Parabéns a todos os organizadores e membros da comunidade Portugal-a-Programar, e continuem o excelente trabalho!

Publicado em Comunidades | Tags , | Publicar um comentário

ASP .NET MVC 3 @ ISEL Tech’11

Actualização (06-06-2011): Os slides, o código-fonte das demonstrações, e a gravação em vídeo desta apresentação já estão disponíveis.

Na próxima semana decorre o ISEL Tech’11, um evento sobre tecnologia, soft-skills, empreendedorismo e empregabilidade, que acontecerá no campus do Instituto Superior de Engenharia de Lisboa nos dias 24, 25 e 26 de Maio de 2011.

No dia 24, pelas 18:30, vou falar sobre ASP .NET MVC 3, mais precisamente sobre as novidades introduzidas nesta versão, com diversas demonstrações práticas incluindo a utilização do Razor View Engine, Granular Validation, Global Filters, Dependency Injection, entre outras novidades.

Portanto, se tem interesse em conhecer as principais funcionalidades introduzidas no ASP .NET MVC 3 ou tem alguma questão sobre o tema, adicione ao seu calendário e apareça na minha sessão! :)

Para mais informações pode visitar a página do evento no Facebook, e a agenda do evento.

Publicado em Eventos | Tags , , , | 1 Comentário

Olá mundo!, v2.0

Este é o primeiro post da versão 2.0 do meu blog, após a migração do BlogEngine.net para o WordPress, e aos poucos irei migrar todos posts antigos, ao mesmo tempo que escrevo novos posts.

Publicado em Pessoal | Tags | Publicar um comentário

Registo para o Exame BETA 71-599: PRO: Designing and Developing Windows Phone 7 Applications

Desde o dia 29 de Março é possível registar-se para o exame BETA 71-599: PRO: Designing and Developing Windows Phone 7 Applications. Ao passar neste exame, além de ter contribuído com a Microsoft para definir a versão final deste exame (que terá o nome 70-599 ao invés de 71-599), receberá créditos para a certificação Microsoft Certified Professional Developer: Windows Phone Developer (MCPD), e só precisará fazer mais dois exames para alcançar esta certificação: O exame 70-513: TS: Windows Communication Foundation Development with Microsoft .NET Framework 4 e o exame 70-516: TS: Accessing Data with Microsoft .NET Framework 4.

MCPD: Windows Phone Developer

Pode encontrar o guia de preparação para este exame está no site da Microsoft Learning:
http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-599

Este exame BETA é gratuito, como é costume em todos os exames BETA da Microsoft, e basta utilizar o código WP599 ao efectuar o registo para obter o desconto de 100%.

Promocode 71-599: WP599

O registo é feito no site da Prometric (http://www.prometric.com/microsoft), e pode fazer o exame no centro mais próximo de si.

É possível fazer o exame de 19 de Abril de 2011 até 4 de Maio de 2011, mas os lugares são limitados e esgotam-se logo nos primeiros dias, por isso é melhor registar-se o quanto antes.

Publicado em Certificações | Tags , , , , , , , , , | Publicar um comentário

Revista PROGRAMAR: Edição 27 – Fevereiro de 2011

Já está disponível a 27ª edição da Revista PROGRAMAR, uma publicação digital gratuita com diversos artigos relacionados com desenvolvimento de software, e com uma nova edição a cada dois meses.

Revista PROGRAMAR 27 Esta edição traz como destaque um artigo introdutório sobre ASP .NET MVC 3 escrito por mim (Look Ma! I’m on a magazine cover!), e outros artigos também interessantes sobre jQuery, AJAX, Desenvolvimento de aplicações para o Windows Phone 7, Programação assíncrona em .NET, entre outros.

Conteúdo desta edição

  • Tema de capa
    • Introdução ao ASP .NET MVC 3.0
  • A programar
    • LUA – Linguagem de Programação (Parte 7)
    • Flex e Byacc (Parte 3)
    • Optimização de SQL em Oracle – Índices
    • jQuery – A Framework
  • Colunas
    • Programador Excêntrico: 6 regras para utilizar AJAX
    • Visual (Not) Basic: Windows Phone 7
    • Core Dump: gcc -Wall myApp.c -linstantaneous -o success
  • Comunidades Técnicas
    • Desenvolvimento em SharePoint 2010
    • GuiaTV CoolthingsPT
    • Habilitar utilizadores externos no SharePoint online – Office365
    • O Futuro da Programação Assíncrona da Plataforma .NET
  • Análises
    • Livro: Silverlight 4.0 – Curso Completo

Download: Revista PROGRAMAR Edição 27 – Fevereiro de 2011.

Publicado em Comunidades, Publicações | Tags , , , , , , , , | Publicar um comentário