1

SSDTプロジェクトのスクリプトを自動化して、変数の代替値を渡して後でデプロイできるように取り組んでいます。

私の公開プロファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
  <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <IncludeCompositeObjects>True</IncludeCompositeObjects>
     <TargetConnectionString>Data Source=.;Integrated Security=True;Pooling=False</TargetConnectionString>
     <TargetDatabaseName>BLANK</TargetDatabaseName>
     <UpdateDatabase>False</UpdateDatabase>
     <ScriptDatabaseOptions>True</ScriptDatabaseOptions>
     <BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
     <CreateNewDatabase>True</CreateNewDatabase>
     <IgnoreObjectPlacementOnPartitionScheme>False</IgnoreObjectPlacementOnPartitionScheme>
     <ProfileVersionNumber>1</ProfileVersionNumber>
     <CommentOutSetVarDeclarations>True</CommentOutSetVarDeclarations>
   </PropertyGroup>
 </Project>

テストスクリプトでは、PowerShellから次のコマンドを呼び出しています

$Directory = 'C:\GitProjects\CI\DevPOC\Database\ETL POC\AdventureWorksDW\'
$Publish = 'AdventureWorksDW.publish.xml'

Set-Location $Directory
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Build
& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Publish /p:SqlPublishProfilePath`="$Directory\$Publish"

次に、以下の例のように、すべて変数値に関連するいくつかのエラーが発生します。

Deploy error SQL72014: SQL Execution error: A fatal error occurred. The variable DatabaseName could not be found.  [C:\GitProjects\CI\POC\Database\ETL POC\AdventureWorksDW\AdventureWorksDW.sqlproj]

ただし、CommentOutSetVarDeclarationsをfalseに設定すると、スクリプトはエラーなしで生成されます。SSDTを介して同じタスクを実行する場合、エラーは発生しません。

誰かが同様の行動を経験したことがありますか?

4

1 に答える 1

2

したがって、Microsoftのサポートを少し行ったり来たりした後、この問題の解決策があります。公開プロファイルで設定されたパラメーターUpdateDatabaseは、この方法で取得および使用されていないようです。これがバグとして認識されたかどうかは100%わかりませんが、代わりに次のコマンドを使用することで問題なく動作します。

& $env:windir\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /t:Publish /p:SqlPublishProfilePath`="$Directory\$Publish" /p:UpdateDatabase=False
于 2013-04-03T15:43:00.540 に答える