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.
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 pastaslib
,logs
edata
)
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.