Развертывание SQL Azure и Powershell для DACPAC
Я развертываю dacpac, построенный на Visual Studio 2012, в SQL Azure с использованием powershell и сталкиваюсь с проблемами, которые, по моему мнению, могут быть связаны с несовместимостью некоторых версий. Публикация работает отлично, когда я делаю это из visual studio, но выдает исключение, когда я делаю это с помощью powershell.
Вот что я делаю в Powershell
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
[System.Reflection.Assembly]::Load("Microsoft.SqlServer.Management.Dac, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91") | out-null
Trap
{
PrintException($_.Exception);
$fileStream.Close()
return;
}
$sqlServerFullName = $sqlServerName + ".database.windows.net"
$serverConnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($sqlServerFullName, $adminLogin, $admingPwd)
$serverconnection.Connect()
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverConnection)
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
Write-Host "Reading contents from $dacpacPath..."
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
Последняя строка в приведенном выше коде - это то, что происходит сбой со следующей ошибкой (внутреннее значение исключения) и не продолжается дальше
The stream cannot be read to construct the DacType.
There is an error in XML document (2, 2).
<DacType xmlns='http://schemas.microsoft.com/sqlserver/dac/Serialization/2012/0
2'> was not expected.
Вот таблица $PSVersionTable от ISE powershell, которую я использую
Name Value
---- -----
PSVersion 2.0
PSCompatibleVersions {1.0, 2.0}
BuildVersion 6.1.7601.17514
CLRVersion 4.0.30319.17929
WSManStackVersion 2.0
PSRemotingProtocolVersion 2.1
SerializationVersion 1.1.0.1
Хотите знать, что может вызвать эту проблему при развертывании с использованием Powershell, когда он работает нормально при развертывании с использованием Visual Studio 2012
PS - Развертывание powershell отлично работает, используя тот же сценарий с файлом dacpac, который я нашел в интернете и который, по-видимому, был предназначен для версии SQL 2005
2 ответа
Если вы установили последний SSDT 2015 ( https://msdn.microsoft.com/en-us/mt186501). Я очень рекомендую это, потому что у него есть много полезных опций для профиля публикации, которые можно сгенерировать с помощью Visual Studio.
Чтобы опубликовать файл в Azure с помощью Powershell, вы можете использовать следующее
$sqlpackage = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\sqlpackage.exe"
$dbserver = "<Azure DB Location>"
$database = "<name of DB on Server>"
# UNC Paths
$dbProfile = "<Path to your Publish Profile>"
$mydacpac = "<location of the dacpac>"
# Publish Command
& $sqlpackage /Action:Publish /tsn:$dbServer /tdn:$database /sf:$mydacpac/pr:$dbProfile /variables:myVariable=1
PS: & работает как Invoke-Expression, упомянутая Pradebban
Попробуйте опубликовать с помощью sqlpackage.exe и Publish.xml
Invoke-Expression = "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe /Action:Publish /Sourcefile:<.dacpac file_path> /pr:'<Publish.xml>'"