Нужно "пост чистить событие" в Visual Studio - PullRequest
16 голосов
/ 24 февраля 2011

Я получил проект VS с событием после сборки с помощью команды командной строки, которая копирует файл (.dll) в целевой каталог bin (отладка или выпуск).Когда я делаю «Очистить» в проекте, все очищается, но этот файл остается.Есть ли способ объявить события после очистки, чтобы я тоже мог удалить этот файл?

Ответы [ 6 ]

17 голосов
/ 24 февраля 2011

Вы можете отредактировать файл проекта напрямую и добавить цель в конец файла. BeforeClean и AfterClean являются целями, как объяснено здесь:

http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx

Вы должны иметь возможность поместить задачу удаления в цель.

EDIT Только что протестировал это (щелчок правой кнопкой мыши по проекту -> выгрузить -> щелчок правой кнопкой мыши -> изменить), и вам нужна следующая цель:

<Target Name="AfterClean">
    <Delete Files="$(TargetDir)\*.txt" />
</Target>

Это работает, когда вы очищаете проект, но не решение - оно работает, но не на 100%.

11 голосов
/ 17 октября 2013

Я обнаружил, что ответ Леома Бёрка с использованием «Удалить файлы» не работает с подстановочными знаками и не говорит вам, что что-то пошло не так. Вот что я сделал вместо этого -

<Target Name="BeforeClean">
        <Message Text="Cleaning other files..."/>
        <Exec Command="del $(ProjectDir)css\*.* /F /Q"/>
        <Exec Command="del $(ProjectDir)images\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)js\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)usercontrols\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)MasterPages\*.* /F /Q" />
        <Exec Command="del $(ProjectDir)App_Data\TEMP\*.* /F /Q /S" />
        <Exec Command="del $(ProjectDir)App_Data\Logs\*.* /F /Q /S" />
    </Target>

Я написал выше для удаления файлов в решении Umbraco, так что когда я делаю diff с тем, что находится в управлении исходным кодом, это не смущает меня сопли.

9 голосов
/ 01 октября 2014

Вы можете использовать символы подстановки, используя встроенную функцию удаления.

<Target Name="AfterClean">
    <ItemGroup>
        <FilesToDelete Include="$(TargetDir)\*.txt"/>
    </ItemGroup>
    <Delete Files="@(FilesToDelete)" />
</Target>
4 голосов
/ 25 января 2018

Наконечник шляпы к @ scrat789 относительно AfterTargets .

Для VS 2017, v15.6.0 Preview 2.0, я получил следующее:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <Message Text="Deleting wwwroot\dist files" Importance="high" />
    <Delete Files="$(ProjectDir)\wwwroot\dist\*.*" ContinueOnError="true" />
  </Target>

Несколько вещей:

  • Обратите внимание, что я использую уникальное имя цели, MyDistClean . Указание имени AfterClean не сработало.
  • Нет необходимости перезагружать csproj после редактирования, чтобы запустить / протестировать задачу очистки.
  • Важность сообщения установлена ​​ высокая , чтобы избежать изменения уровня детализации MSBuild, упомянутого здесь в SO: Цель AfterClean не вызывается при очистке проекта
  • MyDistClean задача была обработана как в рамках решения, так и в рамках проекта.

Вот улучшенная задача по удалению каталога dist веб-пакета при очистке:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <ItemGroup>
      <DistDir Include="$(ProjectDir)wwwroot\dist" />
    </ItemGroup>
    <Message Text="Deleting @(DistDir)" Importance="high" />
    <RemoveDir Directories="@(DistDir)" />
  </Target>
2 голосов
/ 23 ноября 2017

Я думаю, что что-то меняется с Visual Studio 2017.

Работает с тегом: AfterTargets = "Clean"

<Target Name="AfterClean" AfterTargets="Clean">
     <!-- Remove bin folder -->
     <RemoveDir Directories="$(TargetDir)" />
     <!-- Remove obj folder -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" />  
</Target>
1 голос
/ 24 февраля 2011

Вы можете обновить файл csproj, чтобы указать новую цель.Вам придется это сделать в текстовом редакторе.

Взгляните на документацию здесь: Как: расширить процесс сборки Visual Studio .

У вас будут особенноизменить <Target name='AfterClean'>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...