¿Cómo puedo evitar que se copie la carpeta oculta .svn de la carpeta _bin_deployableAssemblies?

Estoy utilizando la carpeta _bin_deployableAssemblies para copyr los ensamblados ASP.NET MVC a la carpeta bin después de cada compilation. Lamentablemente, la tarea MSBuild también copy la carpeta oculta .svn.

Primer bash de arreglar

Quiero resolver esto a nivel de proyecto, así que agregué una tarea AfterBuild objective AfterBuild en el file .csproj, que funciona para comstackciones normales.

 <RemoveDir Directories="@(OutDir).svn" /> 

Pero parece que no funciona cuando publico el sitio. Después de publicar, la carpeta .svn se copy en la carpeta de destino del asistente de publicación. Y, curiosamente, también termina en la carpeta / bin del proyecto, ¡a pesar de la tarea RemoveDir !

En el file de destino C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets un grupo de elementos se crea dinámicamente para include todos los files en la carpeta _bin_deployableAssemblies:

 <CreateItem Include="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\**\*.*" Condition="Exists('$(MSBuildProjectDirectory)\_bin_deployableAssemblies')"> <Output ItemName="_binDeployableAssemblies" TaskParameter="Include"/> </CreateItem> 

Utilizando una tarea de Message en el destino AfterBuild puedo ver que este grupo de elementos incluye todos los files en la carpeta .svn.

Segundo bash de arreglar

Así que probé el siguiente truco para ajustar el grupo de elementos en el objective .AfterBuild:

 <ItemGroup> <_binDeployableAssemblies Remove="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\.svn\**\*.*" /> </ItemGroup> 

Si imprimo la list de files después de eso usando una tarea de Message , puedo ver que ya no incluye los files en la carpeta .svn. ¡Pero los files .svn aún se copyn en la carpeta de salida cuando se crean o publican!

Posible solución real

Parece que el command Publicar primero hace una compilation normal, en cuyo punto podemos eliminar los files usando el objective AfterBuild. Pero luego va a copyr los files a una location temporal (en la carpeta / obj) para publicarlos. Durante esta fase, parece que copy todo de _bin_deployableAssemblies a bin de nuevo y solo luego copy bin (y otros files de proyecto) a la location temporal. Esto parece suceder después de AfterBuild.

Entonces, el truco podría ser enganchar el process en alguna parte antes de que los files del proyecto se copien a la carpeta temporal. O luego, pero luego no solo se debe limpiar la carpeta temporal, sino también la carpeta bin original, por segunda vez. Esto puede ser posible enganchando en uno de los muchos objectives DependsOn.

Si no hay un objective adecuado para hacer esto, entonces tal vez eliminar los files de un grupo de elementos intermedios podría ser una solución para que nunca se copien o publiquen.

No he podido lograr ninguna de estas soluciones posibles debido a una falta de comprensión del process de publicación.

Pregunta principal

¿Cómo puedo evitar que se copien los files o eliminarlos una vez que se copyn? ¿Cómo puedo hacer esto tanto para comstackciones regulares como para el command de publicación?

Agregue esto a su file .csproj (o al file {projectName}.wpp.targets ):

  <PropertyGroup> <OnAfterCopyAllFilesToSingleFolderForPackage> __RemoveSvnFromPackageTemp </OnAfterCopyAllFilesToSingleFolderForPackage> </PropertyGroup> <Target Name="__RemoveSvnFromBin" AfterTargets="_CopyBinDeployableAssemblies"> <Message Text="Removing .SVN from BIN" Importance="normal"/> <RemoveDir Directories="$(OutDir).svn" /> </Target> <Target Name="__RemoveSvnFromPackageTemp"> <Message Text="Removing .SVN from PackageTempDir" Importance="normal"/> <RemoveDir Directories="$(_PackageTempDir)\bin\.svn" /> </Target> 

¡Eso funciona para Build, Package y Publish!