как можно определить разные исходные базы данных в зависимости от целевой среды 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
не могут быть найдены.
Любая помощь высоко ценится!
Заранее спасибо