Правильный шаг сборки для перезаписи входных файлов

Как можно определить разные исходные базы данных в зависимости от целевой среды 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

не может быть найден.

Любая помощь высоко ценится!

заранее спасибо

0 ответов

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