SSDT-выполнить шаг AfterBuild только в том случае, если модель изменилась?


У меня есть шаг AfterBuild в файле проекта SSDT. Этот шаг может занять некоторое время, поэтому я хотел бы выполнить этот шаг только в том случае, если что-то изменилось в проекте SSDT.

Чтобы сделать это для проекта C#, я использую следующее:

<Target
    Name="AfterBuild"
    Condition="'$(_AssemblyTimestampBeforeCompile)' != '$(_AssemblyTimestampAfterCompile)'">

К сожалению, это не работает для проекта SSDT. Есть ли такая Condition='' воля? Есть ли у кого-нибудь документы, в которых я могу найти условия, допустимые в проектах SSDT?

1 2

1 ответ:

Добавьте в проект SSDT следующее:

<Project>
  <PropertyGroup>
    ...
    <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
  </PropertyGroup>
  ...
  <Target Name="GetTimeStampBeforeBuild" BeforeTargets="BeforeBuild">
    <ItemGroup>
      <ProjectOutputFiles Include="$(TargetPath)" />
    </ItemGroup>
    <PropertyGroup>
      <_AssemblyTimestampBeforeCompile>%(ProjectOutputFiles.ModifiedTime)</_AssemblyTimestampBeforeCompile>
    </PropertyGroup>
  </Target>
  <Target Name="GetTimeStampAfterBuild" AfterTargets="SqlPrepareForRun">
    <PropertyGroup>
      <_AssemblyTimestampAfterCompile>%(ProjectOutputFiles.ModifiedTime)</_AssemblyTimestampAfterCompile>
    </PropertyGroup>
  </Target>
</Project>

Это предотвратит выполнение цели PostBuildEvent во время инкрементной сборки. Событие post-build будет выполняться только при первой сборке проекта (после загрузки), а затем также при повторной сборке.