2011-02-18 9 views
7

Estoy trabajando con Visual Studio 2010. He dirigido el resultado del proyecto a una carpeta específica que contendrá todas las DLL y EXE cuando se haya creado. Sin embargo, cuando limpio la solución, la carpeta no se limpia y las DLL aún están presentes en ella.Personalización previa a la limpieza de MSBuild

¿Alguien me puede decir cómo manejar el comando de solución limpia para borrar las carpetas que quiero limpiar? Intenté trabajar con MSBuild y manejar los objetivos BeforeClean y AfterClean, pero no proporcionó el resultado deseado.

Respuesta

2

Puede añadir a su VS .sln archivo de destino especial llamado digamos BuildCustomAction.csproj:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="3.5" DefaultTargets="Build"  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> 
    </PropertyGroup> 

    <ItemGroup> 
     <CleanOutCatalogFiles Include="..\..\bin\$(Configuration)\**\*.dll"> 
     <Visible>false</Visible> 
     </CleanOutCatalogFiles> 
     <CleanOutCatalogFiles Include="..\..\bin\$(Configuration)\**\*.exe"> 
     <Visible>false</Visible> 
     </CleanOutCatalogFiles> 
    </ItemGroup>  

    <Target Name="Build">         
    </Target>            

    <Target Name="Rebuild" 
      DependsOnTargets="Clean;Build">      
    </Target> 

    <Target Name="Clean" 
      Condition="'@(CleanOutCatalogFiles)'!=''"> 
    <Message Text="Cleaning Output Dlls and EXEs" Importance="high" /> 
    <Delete Files="@(CleanOutCatalogFiles)" /> 
    </Target> 
</Project> 

lugar en todas partes que desee y especifique relativa ruta al catálogo de salida para los binarios. Agregar en VS este proyecto como existente. Eso es todo. Con esto puede hacer sus propias acciones personalizadas para tres acciones comunes en VS: compilación, Reconstruir, Limpiar.

Existe manera más compleja de personalizar proceso de construcción utilizando CustomBeforeMicrosoftCommonTargets y CustomAfterMicrosoftCommonTargets pero requiere ser muy bueno en MSBuild.

Espero que esto ayude.

8

La respuesta de Sergio debería funcionar, pero creo que podría ser más claro anular los objetivos BeforeClean/AfterClean. Estos son los ganchos en el proceso de construcción/limpieza proporcionado por microsoft. Cuando haces una limpieza, los VS llaman a los objetivos: BeforeClean; Clean; AfterClean y de manera predeterminada, el primero y el último no hacen nada.

En uno de sus .csproj archivo existente se puede añadir lo siguiente:

<Target Name="BeforeClean"> 
    <!-- DO YOUR STUFF HERE --> 
</Target> 
+1

+1 para esto. Solo asegúrese de agregar los destinos BeforeClean o AfterClean después del archivo Importar Microsoft.CSharp.Targets o redefinirá sus objetivos personalizados BeforeBuild/AfterBuild con los destinos vacíos predeterminados. –

+0

Respuesta remezclada a: '' – Jeroen

Cuestiones relacionadas