Visual Studio: Construir DLLs para uma pasta diferente

Quando se constrói um projecto no Visual Studio, a pasta da aplicação pode ficar muito cheia se tiverem várias assemblies e ficheiros relacionados. Podem mover as assemblies para uma subdirectoria e manter limpa a directoria principal da vossa aplicação.

Definir subdirectorias para pesquisa de assemblies

O primeiro passo é especificar os caminhos adicionais onde se devem procurar assemblies. Podem fazer isso no ficheiro App.config.

Aqui especificamos a subdirectoria lib:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib" />
    </assemblyBinding>
  </runtime>
</configuration>

Podem definir mais do que um caminho, separando-os por ponto e vírgulas.

Editar eventos pós-construção

Agora vamos adicionar alguns eventos pós-construção para mover as assemblies para a pasta correcta.

Abram as propriedades do projecto e vão a Build Events.

Eventos pós-construção
Eventos pós-construção

Especificamos os seguintes comandos:

; Move all assemblies and related files to lib folder
ROBOCOPY "$(TargetDir) " "$(TargetDir)lib\ " /XF *.exe *.config *.manifest /XD lib logs data /E /IS /MOVE
if %errorlevel% leq 4 exit 0 else exit %errorlevel%

Estamos a usar o Robocopy para mover os ficheiros. Este programa está incluído no Windows desde o Windows Vista.

A realçar:

  • XF: exclui ficheiros (aqui não queremos mover os ficheiros *.exe, *.config e *.manifest)
  • XD: exclui pastas (aqui não queremos mover as pastas lib, logs e data)

Importante: reparem nos espaços antes de fechar aspas. Isto é necessário porque o Robocopy trata o backslash como um carácter de escape e o $(TargetDir) inclui um no final.

A última linha é necessária porque o Robocopy tem vários códigos de saída e o evento de construção falha se o código for diferente de 0.

Nuno Freitas
Publicado por Nuno Freitas em 10 março, 2014

Artigos relacionados