DACPAC не будет развернут, потому что "не может подключиться к серверу"?

Я пытаюсь развернуть 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)

Что мне не хватает?

2 ответа

Решение

Обновление до последней версии SSMS должно исправить это. Это доступно здесь: https://msdn.microsoft.com/en-us/library/mt238290.aspx

В противном случае, пожалуйста, подтвердите, что версия LocalDB, которую вы используете - LocalDB 2012. Для этого вы можете выполнить этот запрос к серверу:

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

Библиотека, которая обрабатывает развертывание dacpac, называется структурой приложений уровня данных, или DacFX. Версия DacFX, используемая SSMS 2012, установлена ​​в:

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 Server 2014, было сделано изменение, и Visual Studio получила свою собственную копию DacFX под

C:\program files (x86)\Microsoft Visual Studio XX.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\120

Так вот как вы можете получить различное поведение между разными версиями Visual Studio и SSMS.

У меня была та же проблема, и она была исправлена ​​путем изменения исполняемой папки с "C:\program files (x86)\Microsoft Sql Server\110\DAC\bin" на "C:\program files (x86)\Microsoft Sql Server\120\DAC\ Bin"

Спасибо чандана

Другие вопросы по тегам