Подтвердить что ты не робот

Как создать пользовательское чистое (пост-чистое) событие в Visual Studio 2008?

В нашем процессе сборки для каждого проекта мы используем события Post Build для копирования наших исполняемых файлов в отдельный каталог развертывания. Это работает просто peachy, но проблема в том, что мы сталкиваемся с проблемами с устаревшими файлами после выполнения проекта Clean Solution/Clean. Я хотел бы настроить событие "Чистое", которое удаляет скопированный файл, а Visual Studio 2008, похоже, не предоставляет параметр на странице свойств проекта.

Он имеет:

Build Events:
   Pre-Build Event
   Pre-Link Event
   Post-Build Event
Custom Build Step
   General

То, что я хотел бы найти, - это способ выполнения произвольной командной строки при очистке проекта.

4b9b3361

Ответ 1

Вы можете использовать целевой синтаксис MSBuild в файле csproj. например

  <Target Name="AfterClean">
    <Delete Files="$(OutDir)\$(TargetName).exe" ContinueOnError="true" />
  </Target>

Существует простой способ редактировать файл .csproj непосредственно в среде Visual Studio IDE, описанной в блоге команды MSBuild, но это мой первый пост, поэтому я могу включить только одну гиперссылку. (кратко: разгрузите проект, затем щелкните его правой кнопкой мыши, чтобы увидеть запись "Редактировать [проект].csproj"... ваш csproj появится в среде IDE в виде XML файла с intellisense по элементам и атрибутам. Замечательно!)

Полный список настраиваемых целей здесь: http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx

Ответ 2

Я знаю, что это старый вопрос, но он стал хитом Google, когда я исследовал точно такую ​​же проблему, поэтому я все равно отвечаю.: -)

Для проектов Visual С++ вам необходимо добавить файлы в раздел "Расширения для удаления в чистом виде" в разделе "Общие" параметры конфигурации проекта. Несмотря на то, что он утверждает, что хочет расширения, он фактически использует globs и с радостью примет полные пути и расширит переменные MSBuild. Это сработало для меня:

$(ProjectDir)\deployment\*.*

Я не уверен, что вы можете удалить каталоги таким образом, но он может по крайней мере получить файлы.

Ответ 3

Если вы используете "Свойства проекта → Свойства конфигурации → Настройка пользовательской сборки", вы должны помнить, что нужно заполнить поле "Выходы", иначе оно не будет работать.

от

http://blogs.msdn.com/b/visualstudio/archive/2010/04/26/custom-build-steps-tools-and-events.aspx

"Свойство Outputs представляет собой список файлов с разделителями с запятой и должно указывать, какие файлы сгенерированы как часть выполнения пользовательского шага сборки. Если вы оставите свойство Outputs пустым, ваш пользовательский шаг сборки никогда не будет выполнен, поскольку MSBuild будет определять, что выходы не устарели. Если ваш шаг не генерирует файлы, но вы все еще хотите, чтобы он выполнялся с каждой сборкой, то создание поддельного имени файла будет делать трюк, поскольку этот файл никогда не будет существовать, и MSBuild всегда будет определять что шаг пользовательской сборки устарел."

Ответ 4

Вам нужно будет отредактировать файлы .csproj вручную и добавить цель "AfterClean".

Ответ 5

К сожалению, не существует документального способа ввода пользовательских шагов очистки. Вы можете очистить свой результат в своем предварительном сборке, но это все равно оставит артефакты сразу после чистки.

Из MSDN, вот порядок вызова для различных шагов сборки:

  • Событие Pre-Build
  • Пользовательские шаги сборки для отдельных файлов
  • Прокси-генератор
  • MIDL
  • Компилятор ресурсов
  • Компилятор C/С++
  • Событие Pre-Link
  • Линкера или библиотекаря (в зависимости от ситуации)
  • BSCMake
  • Шаг пользовательской сборки в проекте
  • Инструмент развертывания.
  • Событие после сборки

    MSDN: Общие сведения о шагах пользовательской сборки

Ответ 6

Другие не сделали именно то, что я хотел, и я нашел лучший способ. Протестированный в VS2010 для проекта С++ Win32, перейдите в Project Properties → Configuration Properties → Custom Build Setup. Вы можете добавить пользовательскую командную строку и сообщить VS, какую операцию выполнить команду до или после.