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