Mar 26 2007

.NET: Propriedades dos arquivos

Autor: Marcos Dell Antonio - Categorias: .NET, Direct3D, Mobilidade

Provavelmente muitos desenvolvedores já clicaram com o botão direito sobre um arquivo (seja ele um .cs, .aspx, .bmp, etc) e checaram as propriedades apresentadas na janela que abriu.

Muitas delas são intuitivas, ou seja, de fácil entendimento. Porém, neste tarde tive que passar algumas horas até descobrir exatamente o funcionamento de todas elas.

Eu precisava copiar um arquivo .bmp para o emulador assim que fosse feito o deploy da aplicação. Uma maneira muito simples para ter acesso ao arquivo é usando o Build Action como Embedded Resource. Mas desta forma o executável cresce exponencialmente (aqui passou de 10k para 70k em um teste simples).

A solução mais correta, neste caso, é copiar o arquivo .bmp somente uma vez para o emulador ou dispositivo, pois ele permanecerá intacto durante toda a execução. Como fazer isso?

Antes de apresentar a minha solução, vou descrever o que cada opção significa.

- Build Action: indica o que será feito com o arquivo assim que o build do projeto for executado. Possui as seguintes opções:

  1. None: o arquivo não é copiado para o diretório destino do executável e também não é compilado. É usado normalmente para arquivos de documentação.
  2. Compile: o arquivo é compilado dentro do executável. Usado para arquivos fonte (.cs, .vb, etc).
  3. Content: o arquivo não é compilado mas é copiado para a mesma pasta do executável. Normalmente é usado para arquivos de imagem, .htm, etc.
  4. Embedded Resource: o arquivo fará parte do executável gerado. Ou seja, não será copiado para o destino, mas sim estará “embutido” no executábel (embedded).

Também é possível criar novas opções personalizadas. O blog do time de desenvolvimento do MSBuild publicou um post falando mais sobre o assunto.

- Copy to output directory: específica as condições de cópia do arquivo para o diretório destino do executável. Possui as seguintes opções:

  1. Do not copy: nunca copia o arquivo.
  2. Copy always: sempre copia.
  3. Copy if newer: copia o arquivo somente se for novo. Para os smart devices, as técnicas de comparação para saber se o arquivo é novo estão descritas na MSDN.

- Custom Tool e Custom Tool Namespace: define os componentes e o namespace usado para converter arquivos de um tipo para outro em tempo de design. Veja mais sobre o assunto na MSDN.

Sobre o meu problema, bastou adicionar o arquivo bmp ao projeto e definir a opção Build Action como Content e a Copy to output folder como Copy if newer. Desta forma, sempre que o arquivo bmp mudar no meu computador, será recopiado para o emulador ou dispositivo.

Claro que esta dica também é válida para projetos Windows Forms e WEB.

Fonte: MSDN - File Properties

É isso ae. Até +.

Adicione ao del.icio.us del.icio.us | Adicione ao Rec6 Rec6

Faça um comentário