MSBUILD Выполнение только измененных сценариев SQL - PullRequest
2 голосов
/ 06 февраля 2010

Мне нужно создать сценарий MSBUILD, который выполняет сценарии .SQL, которые изменились с момента последней сборки.

Сначала я думал, что смогу скопировать все сценарии из одной папки в другую, используя задачу <Copy> и используя CopiedFiles <Output> для задачи копирования. Однако задача копирования возвращает все файлы, которые она пыталась скопировать, а не фактически скопированные файлы.

Я могу заставить MSBUILD выполнять сценарии SQL через MSBUILD.ExtensionPack, но я почесываю голову на этом

Ответы [ 3 ]

3 голосов
/ 08 февраля 2010

Вы можете сделать это с помощью концепции, известной как наращивание. Идея состоит в том, что вы должны создать цель, а затем указать входные и выходные данные, которые будут файлами. MSBuild будет сравнивать временные метки входных файлов с выходными файлами. Если все выходы были созданы после всех выходов, то цель пропускается. Если все входные данные являются более новыми, тогда все цели будут выполнены для всех файлов. Если только часть устарела, то только те будут переданы в цель. Подробнее об этом см. В разделе Использование инкрементных сборок в моей статье Рекомендации по созданию надежных сборок, часть 2 .

Также для получения дополнительных ресурсов по MSBuild я составил список на http://sedotech.com/Resources#MSBuild

3 голосов
/ 02 сентября 2010
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="RunScripts">

  <Import Project="$(MSBuildExtensionsPath)\ExtensionPack\MSBuild.ExtensionPack.tasks"/>

  <PropertyGroup>
    <ConnStr>Server=Example;Database=Example;Trusted_Connection=True</ConnStr>
    <BuildFolder>Build\</BuildFolder>
  </PropertyGroup>

  <ItemGroup>
    <Scripts Include="*.sql"/>
  </ItemGroup>

  <Target Name="RunScripts"
          Inputs="@(Scripts)"
          Outputs="@(Scripts->'$(BuildFolder)%(Filename)%(Extension)')">
    <SqlExecute TaskAction="ExecuteScalar"
                Files="@(Scripts)"
                ConnectionString="$(ConnStr)"/>
    <Copy SourceFiles="@(Scripts)"
          DestinationFiles="@(Scripts->'$(BuildFolder)%(Filename)%(Extension)')"/>
  </Target>
</Project>
0 голосов
/ 06 февраля 2010

Может быть, вы копируете в пустой пункт назначения?

SkipUnchangedFiles

If true, skips the copying of files that are unchanged 
between the source and destination. The Copy task considers 
files to be unchanged if they have the same size and the 
same last modified time.

В вашем случае я подозреваю, что все файлы считаются измененными, поскольку они не существуют в месте назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...