2015-08-13 2 views
0

У меня есть решение в Visual Studio с несколькими проектами. Я хотел бы выполнить некоторую задачу пост-сборки (она копирует файлы в какую-либо папку), когда какой-либо из проектов будет построен, и сделайте это один раз.Запустите команду msbuild post-build для нескольких проектов или решений и запустите ее один раз для сборки

Итак, если я построю один проект, который имеет зависимости от 3 других проектов, моя задача пост-сборки будет выполняться 4 раза. Как я могу заставить его выполнять только один раз при создании проектов? Опция с целью решения пост-сборки решения не работает, поскольку она запускается только при построении целого решения.

ответ

0

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

<Target Name="DeployJsPerfFiles" AfterTargets="Build"> 
    <Exec WorkingDirectory="$(WorkgroupDir)" Command="rake suite:deploy" /> 
</Target> 

(я не был в состоянии использовать задачу копирования, потому что мы используем задачи Rake для развертывания)

0

Для этого я бы импортировал общий файл .targets в каждый файл проекта.

<Import Project="..\AfterBuild.targets" /> 

Выше предполагается, что вы разместите его в одной папке вверх. Убедитесь, что его включить после всех других импорта (особенно одно ядро ​​например Microsoft.CSharp.targets)

Создать файл в AfterBuild.targets например:

<Target Name="AfterBuild"> 

     <ItemGroup> 
      <!-- Items to copy --> 
      <CopyItems Include="c:\xyz\*" /> 
     </ItemGroup> 
      <!-- Set the source to the item group and the destination folder and the SkipUnchangedFiles property --> 
     <Copy SourceFiles="@(CopyItems)" DestinationFolder="c:\xyz\destination-folder" OverwriteReadOnlyFiles="true" SkipUnchangedFiles="true"/> 

    </Target> 

</Project> 

Примечание свойство SkipUnchangedFiles из MsBuild Copy задача. Если вы создадите какой-либо проект, он будет копироваться, только если исходные файлы будут изменены с целевых. Если вы создадите все файлы проектов, исходные файлы будут копироваться только один раз.

+0

Это все равно будет выполнено 4 раза. См. Инкрементный пример сборки здесь: http://www.digitallycreated.net/Blog/67/incremental-builds-in-msbuild-and-how-to-avoid-breaking-them –

+1

Ваш заявленный результат состоял в том, чтобы копировать только файлы один раз. Это достигает результата – Avner

Смежные вопросы