Условно собрать 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 для отправки изменений.