Условно собрать Post-Deploy в SSDT SQLPROJ

Я хочу условно создать сценарий после развертывания в моем проекте SSDT, но я не понимаю, как это сделать. Поэтому обычно сценарий после развертывания создается, но я хочу, чтобы при сборке отладки не создавался и не запускался сценарий после развертывания. Я запускаю сборку из командной строки, чтобы я мог передать свойства, но как я могу использовать свойство, чтобы не запускать сценарий после развертывания?

Опции, которые я вижу: SQLCMD, или редактирование файла SQLPROJ, или передача свойств, но я не могу найти никаких ссылок на то, какие свойства доступны, а какие нет на файлы SQLPROJ.

Файл, который я хочу построить условно, находится здесь:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  

Мой блок сборки Debug выглядит так:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath>bin\Debug\</OutputPath>
    <BuildScriptName>$(MSBuildProjectName).sql</BuildScriptName>
    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineDebug>true</DefineDebug>
    <DefineTrace>true</DefineTrace>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>  

И моя командная строка выглядит так:

msbuild $sqlprojFilePath /p:Configuration="Debug"

2 ответа

Решение

В вашем.sqlproj добавьте эту строку, чтобы она появлялась после импорта в Microsoft.Data.Tools.Schema.SqlTasks.targets

Найдите эту строку в файле вашего проекта после импорта на *SqlTasks.targets.

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />

<PropertyGroup Condition="'$(Configuration)'=='debug'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>

Это удаляет проекты развертывания из цепочки зависимостей и может быть изменено для использования альтернативного свойства.

<PropertyGroup Condition="'$(SkipDeployment)'=='true'">
  <DeployDependsOn />
  <SqlDeployDependsOn />
</PropertyGroup>

Командная строка:

msbuild.exe mydb.sqlproj /p:SkipDeployment=true

Большой Редактировать:

Или вы можете взять это:

<ItemGroup>
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  

и измените его на следующее:

<ItemGroup Condition="'$(Configuration)'=='debug'">
    <PostDeploy Include="PostDeploymentScripts\Script.PostDeployment1.sql" />
</ItemGroup>  

Вы можете сделать это с помощью переменной SQLCMD. Установите его в проекте и проверьте значение этой переменной при публикации проекта. Я написал что-то вроде этого здесь:

http://schottsql.blogspot.com/2013/05/trick-to-not-run-prepost-sql-on-publish.html

Не уверен насчет командной строки msbuild, так как я обычно использовал sqlpackage.exe для отправки изменений.

Другие вопросы по тегам