MSBUILD仅执行已更改的SQL脚本

MSBUILD仅执行已更改的SQL脚本,msbuild,Msbuild,我需要构造一个MSBUILD脚本,执行自上次生成以来已更改的.SQL脚本 我最初认为我可以使用任务将所有脚本从一个文件夹复制到另一个文件夹,并使用CopiedFiles执行复制任务。但是,复制任务返回它试图复制的所有文件,而不是实际复制的文件 我可以通过MSBUILD.ExtensionPack让MSBUILD执行SQL脚本,但我对此感到困惑是不是您复制到了一个空的目标 SkipUnchangedFiles If true, skips the copying of files that are

我需要构造一个MSBUILD脚本,执行自上次生成以来已更改的.SQL脚本

我最初认为我可以使用
任务将所有脚本从一个文件夹复制到另一个文件夹,并使用CopiedFiles
执行复制任务。但是,复制任务返回它试图复制的所有文件,而不是实际复制的文件


我可以通过MSBUILD.ExtensionPack让MSBUILD执行SQL脚本,但我对此感到困惑

是不是您复制到了一个空的目标

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.

在您的情况下,我怀疑所有文件都被视为已更改,因为它们在目标位置不存在。

您可以使用称为增量构建的概念来实现这一点。其思想是创建一个目标,然后指定输入和输出,即文件。MSBuild将比较输入文件和输出文件的时间戳。如果所有输出都是在所有输出之后创建的,则跳过目标。如果所有输入都较新,则将对所有文件执行所有目标。如果只有一部分过期,那么只有那些过期的才会传递给目标。有关这方面的更多信息,请参阅我文章中的“使用增量构建”一节

关于MSBuild的更多信息,我在


服务器=示例;数据库=示例;可信连接=True
建造\

我的一些文本似乎被解释为标签,第二段应该是:我最初认为我可以使用复制任务和复制任务的CopiedFiles输出将所有脚本从一个文件夹复制到另一个文件夹。但是,复制任务返回它试图复制的所有文件,而不是实际复制的文件。否,复制任务报告所有尝试复制的文件,而不仅仅是实际复制的文件。这是我在搜索互联网时看到的一个已知问题。@imbz-Dang!你说得对-我以前从未听说过这个愚蠢的错误。谢谢你,这正是我想要的。这就是如何用Data Dude解决这个问题。如果微软能提供这个“开箱即用”的任务,那就太好了。
<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>