Правильный шаг сборки для перезаписи входных файлов
Как можно определить разные исходные базы данных в зависимости от целевой среды Azure Analysis Services, но при этом придерживаться процесса развертывания в VS 2017?
Я нашел несколько статей ( https://blogs.msdn.microsoft.com/cathyk/2011/08/10/deploying-tabular-projects-using-a-custom-msbuild-task/)
но не хочу использовать часть AMO для развертывания.
Моя идея состояла в том, чтобы изменить файл smproj-> добавив переменные, которые содержат свойства исходной базы данных, и настроить их в зависимости от целевого сервиса анализа. Затем я бы манипулировал файлом *.asdatabase с помощью пользовательской задачи сборки и заменял соответствующие строки. В файле custom_build.target:
<UsingTask TaskFactory="PowershellTaskFactory" TaskName="DeployDB" AssemblyFile="$(MSBuildExtensionsPath64)ExtensionPack\4.0\MSBuild.ExtensionPack.TaskFactory.PowerShell.dll">
<ParameterGroup>
<OutPath Required="True" ParameterType="System.String"/>
<DataSourceObj Required="True" ParameterType="System.String"/>
<DBName Required="True" ParameterType="System.String"/>
<ServerName Required="True" ParameterType="System.String"/>
</ParameterGroup>
<Task>
<![CDATA[
$OutPathFinal = ($OutPath + (get-ChildItem ($OutPath += "*.asdatabase") -name))
$file = Get-Content $OutPathFinal
$files = $file | ConvertFrom-Json
$files.model.dataSources | Where{$_.name -eq $DataSourceObj} | ForEach{$_.connectionDetails} | ForEach{$_.address} | ForEach{$_.server = $ServerName; $_.database = $DBName}
$files.model.dataSources | Where{$_.name -eq $DataSourceObj} | ForEach{$_.credential} | ForEach{$_.path = $ServerName + ';' + $DBName}
$log.LogMessage([Microsoft.Build.Framework.MessageImportance]"High", "Step 1")
$files | ConvertTo-Json -depth 100 | Out-File ($OutPathFinal)
$files | ConvertTo-Json -depth 100 | Out-File ($OutPathFinal + 'copy')
<# echo script to build output log to help debug as needed #>
$log.LogMessage([Microsoft.Build.Framework.MessageImportance]"High", "Step2")
]]>
</Task>
</UsingTask><Target Name="AfterBuild" Inputs="$(OutDir)$(DeploymentServerCubeName).asdatabase" Outputs="$(OutDir)$(DeploymentServerCubeName).asdatabasecopy" DependsOnTargets="CopyFilesToOutputDirectory">
<DeployDB OutPath="$(OutDir)" DataSourceObj="$(DataSourceName)" DBName="$(SourceServerDatabase)" ServerName="$(SourceServerName)"></DeployDB>
При выполнении шага "Создание" в Visual Studio 2017 это работает, оба файла ($(OutDir)$(DeploymentServerCubeName).asdatabase, $(OutDir)$(DeploymentServerCubeName).asdatabasecopy) содержат правильные строки. Когда я выполняю шаг развертывания, только файл $ (OutDir) $ (DeploymentServerCubeName).asdatabasecopy содержит правильные свойства исходной базы данных. Я подозреваю, что выбранный мной шаг не правильный, а с использованием
DependsOnTargets="CopyFilesToOutputDirectory"
приводит к ошибке, что части
$(OutDir)$(DeploymentServerCubeName).asdatabase
не может быть найден.
Любая помощь высоко ценится!
заранее спасибо