Нужно "сообщение чистое событие" в Visual Studio

У меня есть проект VS с событием post-build с командой командной строки, которая копирует файл (DLL) в целевой диск bin (отладка или выпуск). Когда я делаю "Очистить" в проекте, всякая вещь очищается, но этот файл остается. Есть ли способ публикации сообщений после очистки, поэтому я могу также удалить этот файл?

Ответ 1

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

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

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

ИЗМЕНИТЬ Просто протестируйте это (щелкните правой кнопкой мыши проект → выгрузить → щелкните правой кнопкой мыши → изменить), и следующая цель - то, что вам нужно:

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

Это работает при очистке проекта, но не в решении - оно работает, но не на 100%.

Ответ 2

Я обнаружил, что ответ Leom Burke, использующий "Удалить файлы", не работает с подстановочными знаками и не говорит вам, что что-то пошло не так. Вот что я сделал вместо этого -

<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, чтобы, когда я делаю разницу с тем, что в управлении источником, это не путает сопли из меня.

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Работает с тегом: AfterTargets = "Очистить"

<Target Name="AfterClean" AfterTargets="Clean">
     <!-- Remove bin folder -->
     <RemoveDir Directories="$(TargetDir)" />
     <!-- Remove obj folder -->
     <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" />  
</Target>

Ответ 6

Кончик шляпы до @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 после редактирования, чтобы запустить/проверить задачу Clean.
  • Значение сообщения установлено высокое, чтобы избежать изменения уровня многословности MSBuild, упомянутого здесь в SO: Целевой объект AfterClean не будет вызываться, когда я очищаю проект
  • Задача MyDistClean обрабатывалась как в рамках решения, так и в рамках проекта.

Здесь задача улучшилась, чтобы стереть каталог каталога webpack после Clean:

  <Target Name="MyDistClean" AfterTargets="Clean">
    <ItemGroup>
      <DistDir Include="$(ProjectDir)wwwroot\dist" />
    </ItemGroup>
    <Message Text="Deleting @(DistDir)" Importance="high" />
    <RemoveDir Directories="@(DistDir)" />
  </Target>