Я использую папку _bin_deployableAssemblies для копирования узлов ASP.NET MVC в папку bin после каждой сборки.К сожалению, задача MSBuild также копирует скрытую папку .svn.
Первая попытка исправить
Я хочу решить эту проблему на уровне проекта, поэтому я добавил задачу RemoveDir
к цели AfterBuild
в файле .csproj, которая работает длянормальные сборки.
<RemoveDir Directories="@(OutDir).svn" />
Но, кажется, это не работает, когда я публикую сайт.После публикации папка .svn копируется в целевую папку мастера публикации.И как ни странно, он также попадает в папку / bin в проекте, несмотря на задачу RemoveDir
!
В файле целей C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets
группа элементов создается динамически, чтобы включить все файлы в папку _bin_deployableAssemblies:
<CreateItem Include="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\**\*.*"
Condition="Exists('$(MSBuildProjectDirectory)\_bin_deployableAssemblies')">
<Output ItemName="_binDeployableAssemblies" TaskParameter="Include"/>
</CreateItem>
Используя задачу Message
в цели AfterBuild
, я вижу, что эта группа элементов включает все файлы в папке .svn.
Вторая попытка исправить
Итак, я попробовал следующий трюк для настройки группы элементов в цели .AfterBuild:
<ItemGroup>
<_binDeployableAssemblies Remove="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\.svn\**\*.*" />
</ItemGroup>
Если я распечатываю список файлов послечто при использовании задачи Message
я вижу, что она больше не включает файлы в папке .svn. Но , файлы .svn по-прежнему копируются в выходную папку при сборке или публикации!
Возможное фактическое исправление
Кажется, что команда Publish сначала выполняет обычную сборку, в этот момент мы можем удалить файлы, используя цель AfterBuild.Но затем он собирается скопировать файлы во временную папку (в папку / obj), чтобы опубликовать их.На этом этапе кажется, что он копирует все из _bin_deployableAssemblies в bin снова и только затем копирует bin (и другие файлы проекта) во временную папку.Кажется, это происходит после AfterBuild.
Таким образом, хитрость может заключаться в том, чтобы подключиться к процессу где-нибудь до того, как файлы проекта будут скопированы во временную папку.Или после этого, но затем необходимо очистить не только временную папку, но и исходную папку bin.Это можно сделать, подключившись к одной из множества целей DependsOn.
Если подходящей цели для этого нет, то, возможно, удаление файлов из некоторой группы элементов-посредников может быть решением, поэтому они никогда не будут скопированы.или опубликовано.
Мне не удалось выполнить ни одно из этих возможных исправлений из-за недостаточного понимания процесса публикации.
Основной вопрос
Как можно предотвратить копирование файлов или удалить файлы после их копирования?Как я могу сделать это как для обычных сборок, так и для команды публикации?