Правильный шаг сборки для перезаписи входных файлов - PullRequest
0 голосов
/ 15 октября 2018

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

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

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

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

...