首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否因为“无法连接到服务器”而不部署DACPAC?

是否因为“无法连接到服务器”而不部署DACPAC?
EN

Stack Overflow用户
提问于 2016-03-12 08:03:52
回答 2查看 12.1K关注 0票数 8

我正在尝试将DACPAC部署到LocalDB 2012,但它就是不具备:

堆栈跟踪如下:

代码语言:javascript
复制
==================================

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进行部署是可行的,但是我无法将数据库升级到数据层应用程序,我得到了这样的消息:

代码语言:javascript
复制
===================================

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)

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-12 08:49:41

更新到SSMS的最新版本应该可以解决此问题。你可以在这里找到:https://msdn.microsoft.com/en-us/library/mt238290.aspx

否则,请确认您使用的LocalDB版本为LocalDB 2012。为此,您可以对服务器运行以下查询:

代码语言:javascript
复制
select @@version

  • 11.0.xxxx = SQL Server 2012
  • 12.0.xxxx = SQL Server 2014
  • 13.0.xxxx = SQL Server 2016

处理dacpac部署的库称为数据层应用程序框架,或DacFX。SSMS 2012使用的DacFX版本安装在:

代码语言:javascript
复制
C:\program files (x86)\Microsoft Sql Server\110\DAC\bin

请注意路径中的"110“,表示该版本的DacFX最高支持SQL Server 2012。SSMS 2014在类似路径中查找DacFX,但在120文件夹中,并且该版本的DacFX最多支持SQL Server 2014,依此类推。

当DacFX被要求部署到比所支持的版本更新的服务器版本时,它会给出“无法连接”的错误消息。(顺便说一句,错误消息在较新版本的DacFX中得到了改进)。

在某个时间点,Visual Studio使用上述路径中安装的DacFX版本,但大约在SQL Server工具中发布SQL Server2014支持的时候,进行了更改,Visual Studio在以下位置获得了自己的DacFX副本

代码语言:javascript
复制
C:\program files (x86)\Microsoft Visual Studio XX.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120

因此,这就是如何在不同版本的Visual Studio和SSMS之间获得不同的行为。

票数 11
EN

Stack Overflow用户

发布于 2018-01-03 16:13:41

我也遇到了同样的问题,通过将可执行文件夹从"C:\program files (x86)\Microsoft Sql Server\110\DAC\bin“更改为"C:\program files (x86)\Microsoft Sql Server\120\DAC\bin”,修复了这个问题。

谢谢,Chandana

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35952040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档