Выполнение команд POST_BUILD на основе файловых зависимостей - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть шаг DLL POST_BUILD, который копирует DLL в каталог A. Предположим, я затем удаляю файл из каталога A. Затем я нажимаю F5 в Visual Studio, и файл не копируется.

Какие у меня есть варианты? Как указать, что существует набор операций, которые должны выполняться как каждый раз, когда DLL-библиотека связана, и когда файл в каталоге A устарел (или отсутствует)?

РЕДАКТИРОВАТЬ: Это, в частности, неуправляемый проект C ++, и имеет только файлы .vcproj, сгенерированные CMake. Поэтому редактирование .vcproj не практично в моем рабочем процессе.

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Подход Ганса тоже хорош.

Вместо того, чтобы использовать ловушки IDE, лучше редактировать проект напрямую, поскольку msbuild предоставляет полный набор задач для выполнения того, что вы хотите.

Если вы отредактируете файл .csproj (щелкните правой кнопкой мыши -> выгрузить проект -> изменить) и добавите шаг после сборки, вы получите желаемое поведение для грязного копирования:

<Target Name="AfterBuild">
  <ItemGroup>
    <BuildArtifacts Include="MyDll.dll"/>
    <FileWrites Include="$(DestDir)\*.*" />
  </ItemGroup>
  <Copy SourceFiles="@(BuildArtifacts)" DestinationFiles="->'$(DestDir)\%(Filename)%(Extension)'" />
</Target>
1 голос
/ 29 сентября 2011

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

На сегодняшний день самое простое решение - просто не удалять этот файл, малоточка.Еще один способ сделать msbuild умнее - добавить файл в ваш проект.Используйте Проект + Добавить существующий элемент.Установите Build action = Content, Copy to Output Directory = Copy, если новее.Конечно, это немного забивает дерево вашего проекта.

...