Sql server 用于DACPAC部署的SQL Azure和Powershell

Sql server 用于DACPAC部署的SQL Azure和Powershell,sql-server,powershell,azure-sql-database,dac,azure-powershell,Sql Server,Powershell,Azure Sql Database,Dac,Azure Powershell,我正在使用powershell将基于visual studio 2012构建的dacpac部署到SQL Azure,并遇到了一些问题,我认为这些问题可能与版本不兼容有关。当我从VisualStudio进行发布时,发布工作正常,但当我使用powershell进行发布时,会引发异常 下面是我在Powershell中所做的 [System.Reflection.Assembly]::Load("Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0

我正在使用powershell将基于visual studio 2012构建的dacpac部署到SQL Azure,并遇到了一些问题,我认为这些问题可能与版本不兼容有关。当我从VisualStudio进行发布时,发布工作正常,但当我使用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.
想知道当我使用Powershell部署时会出现什么问题,当我使用visual studio 2012部署时,它工作正常


另外,powershell部署使用与我在internet上找到的dacpac文件相同的脚本工作正常,该文件显然是针对SQL 2005版本的

尝试使用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>'"
Invoke Expression=“C:\Program Files(x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe/Action:Publish/Sourcefile:/pr:“”

如果您安装了最新的SSDT 2015()。我强烈推荐它,因为它有很多有用的发布配置文件选项,可以使用VisualStudio生成

您可以使用以下命令使用Powershell将文件发布到Azure

$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
$sqlpackage=“C:\Program Files(x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120\sqlpackage.exe”
$dbserver=“”
$database=“”
#UNC路径
$dbProfile=“”
$mydacpac=“”
#发布命令
&$sqlpackage/Action:Publish/tsn:$dbServer/tdn:$database/sf:$mydacpac/pr:$dbProfile/variables:myVariable=1

PS:&与Pradebban提到的调用表达式类似

您尝试过使用WindowsAzurePowerShell命令吗(可通过web平台安装程序下载,或在github上下载:dacpac API和文件架构已针对SQl 2012进行了更改,并且与以前版本的SQl完全不兼容,反之亦然。因此,如果您将SQl 2008 R2 dacpac DLL与2012 SQl dacpac一起使用,则将完全不兼容。)bomb@Nick-你有关于th的其他信息吗e不兼容?老实说,已经很长时间了,我想不起细节了。我确实记得visual studio中的SQL数据工具版本控制在发现问题时起到了一定作用-抱歉。您是否尝试过通过提升的命令运行powershell ISE(以管理员的身份)?您正在使用的用户可能还需要访问您的Azure部署环境。如果您像我一样通过谷歌搜索偶然发现此解决方案,您可能在生成发布配置文件时遇到一些问题。这可以通过在PowerShell命令提示符下执行
Get-AzurePublishSettingsFile
来完成。这将启动web browser设置为Azure发布设置刀片。您可以从那里下载发布配置文件。
$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