DACPAC 不会部署,因为“无法连接到服务器”?
DACPAC won't deploy because 'can't connect to server'?
我正在尝试将 DACPAC 部署到 LocalDB 2012,但它就是没有:
堆栈轨迹如下:
==================================
Could not deploy package. (Microsoft.SqlServer.Dac)
------------------------------
Program Location:
at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, Action`2 reportStatus, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.InternalDeploy(IPackageSource packageSource, Boolean isDacpac, String targetDatabaseName, DacDeployOptions options, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.Deploy(DacPackage package, String targetDatabaseName, Boolean upgradeExisting, DacDeployOptions options, Nullable`1 cancellationToken)
at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.Install()
at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.RunAction()
at Microsoft.SqlServer.Management.Dac.DacWizard.ExecuteDacPage.backgroundWorker1_DoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
===================================
Unable to connect to target server. (Microsoft.Data.Tools.Schema.Sql)
------------------------------
Program Location:
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.OnInit(ErrorManager errors, String targetDBName)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment..ctor(SqlDeploymentConstructor constructor)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentConstructor.ConstructServiceImplementation()
at Microsoft.SqlServer.Dac.DacServices.CreatePackageToDatabaseDeployment(String connectionString, IPackageSource packageSource, String targetDatabaseName, DacDeployOptions options, ErrorManager errorManager)
at Microsoft.SqlServer.Dac.DeployOperation.<>c__DisplayClass4.<CreatePlanInitializationOperation>b__0(Object operation, CancellationToken token)
at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.ReportMessageOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
既然我正尝试通过 SSMS 部署它,我知道我可以连接到服务器。我已经检查了 Visual Studio 中的解决方案,目标版本适用于 SQL Server 2012,并且连接字符串似乎是正确的。
有趣的是,通过 Visual Studio 进行部署是可行的,但我无法将数据库升级到数据层应用程序,我收到此消息:
===================================
Database source is not a supported version of SQL Server (localdb)\MYINSTANCE: . (Microsoft.SqlServer.Dac)
------------------------------
Program Location:
at Microsoft.SqlServer.Dac.DacServices.GetDatabaseSchemaProvider(String connectionString)
at Microsoft.SqlServer.Dac.DacServices.InternalRegister(String targetDatabaseName, String applicationName, Version applicationVersion, String applicationDescription, ModelStorageType modelStorageType)
at Microsoft.SqlServer.Dac.DacServices.<>c__DisplayClass29.<Register>b__28(Object operation, CancellationToken token)
at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, Action`2 reportStatus, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.Register(String targetDatabaseName, DacSchemaModelStorageType modelStorageType, String applicationName, Version applicationVersion, String applicationDescription)
at Microsoft.SqlServer.Management.Dac.DacWizard.RegisterModel.RunAction()
at Microsoft.SqlServer.Management.Dac.DacWizard.ExecuteDacPage.backgroundWorker1_DoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
我错过了什么?
更新到最新版本的 SSMS 应该可以解决这个问题。可在此处获取:https://msdn.microsoft.com/en-us/library/mt238290.aspx
否则,请确认您使用的 LocalDB 版本是 LocalDB 2012。为此,您可以运行对服务器进行以下查询:
select @@version
- 11.0.xxxx = SQL 服务器 2012
- 12.0.xxxx = SQL 服务器 2014
- 13.0.xxxx = SQL 服务器 2016
处理 dacpac 部署的库称为数据层应用程序框架或 DacFX。 SSMS 2012使用的DacFX版本安装在:
C:\program files (x86)\Microsoft Sql Server0\DAC\bin
注意路径中的“110”,表示 DacFX 的版本最高支持 SQL Server 2012。SSMS 2014 在类似的路径中查找 DacFX,但在 120 文件夹中,并且该版本DacFX 最多支持 SQL Server 2014,依此类推。
当 DacFX 被要求部署到比支持版本更新的服务器版本时,它会给出 "Cannot connect" 错误消息。 (顺便说一下,错误信息在较新版本的 DacFX 中得到了改进)。
在某个时间点,Visual Studio 使用了安装在上述路径中的 DacFX 版本,但是大约在 SQL Server 2014 支持在 SQL Server 中发布的时候工具,进行了更改,Visual Studio 在
下获得了自己的 DacFX 副本
C:\program files (x86)\Microsoft Visual Studio XX.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0
这就是您如何在不同版本的 Visual Studio 和 SSMS 之间获得不同的行为。
我遇到了同样的问题,通过将可执行文件夹从 "C:\program files (x86)\Microsoft Sql Server0\DAC\bin" 更改为 "C:\program files (x86)\Microsoft Sql Server0\DAC\bin"
解决了这个问题
谢谢,
钱达纳
我正在尝试将 DACPAC 部署到 LocalDB 2012,但它就是没有:
堆栈轨迹如下:
==================================
Could not deploy package. (Microsoft.SqlServer.Dac)
------------------------------
Program Location:
at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, Action`2 reportStatus, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.InternalDeploy(IPackageSource packageSource, Boolean isDacpac, String targetDatabaseName, DacDeployOptions options, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.Deploy(DacPackage package, String targetDatabaseName, Boolean upgradeExisting, DacDeployOptions options, Nullable`1 cancellationToken)
at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.Install()
at Microsoft.SqlServer.Management.Dac.DacWizard.DeployModel.RunAction()
at Microsoft.SqlServer.Management.Dac.DacWizard.ExecuteDacPage.backgroundWorker1_DoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
===================================
Unable to connect to target server. (Microsoft.Data.Tools.Schema.Sql)
------------------------------
Program Location:
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentEndpointServer.OnInit(ErrorManager errors, String targetDBName)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeployment..ctor(SqlDeploymentConstructor constructor)
at Microsoft.Data.Tools.Schema.Sql.Deployment.SqlDeploymentConstructor.ConstructServiceImplementation()
at Microsoft.SqlServer.Dac.DacServices.CreatePackageToDatabaseDeployment(String connectionString, IPackageSource packageSource, String targetDatabaseName, DacDeployOptions options, ErrorManager errorManager)
at Microsoft.SqlServer.Dac.DeployOperation.<>c__DisplayClass4.<CreatePlanInitializationOperation>b__0(Object operation, CancellationToken token)
at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.ReportMessageOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.CompositeOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
既然我正尝试通过 SSMS 部署它,我知道我可以连接到服务器。我已经检查了 Visual Studio 中的解决方案,目标版本适用于 SQL Server 2012,并且连接字符串似乎是正确的。
有趣的是,通过 Visual Studio 进行部署是可行的,但我无法将数据库升级到数据层应用程序,我收到此消息:
===================================
Database source is not a supported version of SQL Server (localdb)\MYINSTANCE: . (Microsoft.SqlServer.Dac)
------------------------------
Program Location:
at Microsoft.SqlServer.Dac.DacServices.GetDatabaseSchemaProvider(String connectionString)
at Microsoft.SqlServer.Dac.DacServices.InternalRegister(String targetDatabaseName, String applicationName, Version applicationVersion, String applicationDescription, ModelStorageType modelStorageType)
at Microsoft.SqlServer.Dac.DacServices.<>c__DisplayClass29.<Register>b__28(Object operation, CancellationToken token)
at Microsoft.SqlServer.Dac.Operation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context)
at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, Action`2 reportStatus, CancellationToken cancellationToken)
at Microsoft.SqlServer.Dac.DacServices.Register(String targetDatabaseName, DacSchemaModelStorageType modelStorageType, String applicationName, Version applicationVersion, String applicationDescription)
at Microsoft.SqlServer.Management.Dac.DacWizard.RegisterModel.RunAction()
at Microsoft.SqlServer.Management.Dac.DacWizard.ExecuteDacPage.backgroundWorker1_DoWork(Object sender, DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
我错过了什么?
更新到最新版本的 SSMS 应该可以解决这个问题。可在此处获取:https://msdn.microsoft.com/en-us/library/mt238290.aspx
否则,请确认您使用的 LocalDB 版本是 LocalDB 2012。为此,您可以运行对服务器进行以下查询:
select @@version
- 11.0.xxxx = SQL 服务器 2012
- 12.0.xxxx = SQL 服务器 2014
- 13.0.xxxx = SQL 服务器 2016
处理 dacpac 部署的库称为数据层应用程序框架或 DacFX。 SSMS 2012使用的DacFX版本安装在:
C:\program files (x86)\Microsoft Sql Server0\DAC\bin
注意路径中的“110”,表示 DacFX 的版本最高支持 SQL Server 2012。SSMS 2014 在类似的路径中查找 DacFX,但在 120 文件夹中,并且该版本DacFX 最多支持 SQL Server 2014,依此类推。
当 DacFX 被要求部署到比支持版本更新的服务器版本时,它会给出 "Cannot connect" 错误消息。 (顺便说一下,错误信息在较新版本的 DacFX 中得到了改进)。
在某个时间点,Visual Studio 使用了安装在上述路径中的 DacFX 版本,但是大约在 SQL Server 2014 支持在 SQL Server 中发布的时候工具,进行了更改,Visual Studio 在
下获得了自己的 DacFX 副本C:\program files (x86)\Microsoft Visual Studio XX.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0
这就是您如何在不同版本的 Visual Studio 和 SSMS 之间获得不同的行为。
我遇到了同样的问题,通过将可执行文件夹从 "C:\program files (x86)\Microsoft Sql Server0\DAC\bin" 更改为 "C:\program files (x86)\Microsoft Sql Server0\DAC\bin"
解决了这个问题谢谢, 钱达纳