3

この質問は、次の質問に関連しています。

TFS ビルドを使用してトリガーされたときに、Powershell で sqlpackage.exe の警告/エラーを抑制します。

ただし、以下に示すように、開発中の回避策に問題があります。

    try {
    & "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /SourceFile:"$dacpac" /Profile:"$dbProfile" /p:UnmodifiableObjectWarnings=false /Action:Publish 2>&1
}
catch {
    Write-Host "Exception: $_"
    if($_.TargetObject -like $Pattern) {
        Write-Host "Known exception - treat as warning"
    }
    if($LastExitCode -ne 0) {
        throw "An error occurred deploying database. Please examine the log to determine the nature of the error"
    }
}

stderr を stdout にリダイレクトしない場合、sqlpackage が警告をログに記録すると、プロセスは失敗を示します。

前のコマンドで stderr を stdout にリダイレクトすると、sqlpackage.exe が警告をスローしたときにプロセスを完了できますが、完了すると例外がスローされます。次に、既知の例外と同じ例外テキストを調べることができ、安全に無視できます。

ただし、警告だけでなく何かが sqlpackage によってログに記録されます。つまり、実際の失敗エラーです。例外の追加テキストを特定できません。キャッチ内で、私が見ることができるのは警告メッセージだけです。stderr リダイレクトを削除すると、完全な出力がログに記録されますが、これは権限に関連するエラーです。

したがって、私のスクリプトは必要なときに成功し、気にしないという警告を無視します。必要なときにも失敗しますが、適切なログメッセージを出力できません。次に、展開スクリプトを編集し、展開などを再実行する必要がありますが、すべて手間がかかり、再現できません。

どんなヒントでも大歓迎です。

4

1 に答える 1

3

この問題は、最新の SqlPackage.exe リリース (2014 年 6 月の DacFramework.msi リリース) で修正されており、Visual Studio 用の 2014 年 7 月の SQL Server ツール更新プログラムにバンドルされています。警告は、StdErr ではなく StdOut に送信されるようになりました。

2014 年 4 月の時点で、SqlPackage.exe の場所が変更されていることに注意してください。SSMS または DacFramework.msi を介してインストールされた場合、"C:\Program Files (x86)\Microsoft SQL Server\120\DAC\Bin" にあります。VS の SQL Server ツールの一部としてインストールされている場合、「C:\Program Files (x86)\Microsoft Visual Studio \Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120」の下にあります。VisualStudioVersion は「11.0」です。 VS2012 の場合は「12.0」、VS2013 の場合は「12.0」。

于 2014-09-02T22:55:07.963 に答える