2016-07-04 2 views
2

Этот вызов DacServices.Deploy работает отлично подходит для SQL Server LocalDB 2014, но терпит неудачу при установке SQL Server LocalDB 2016:DacServices.Deploy на SQL-сервер LocalDB +2016 недостаток - не удалось подключиться

string dacConnectionString = $"Server=(localdb)\\mssqllocaldb; Integrated Security=true; database={DatabaseName}"; 
var dacServices = new DacServices(dacConnectionString); 
dacServices.Message += (sender, args) => Console.WriteLine($"{args.Message.Prefix}: {args.Message.Message}"); // Log dacpac deploy messages 
dacServices.Deploy(LoadDacPac(), DatabaseName, true, new DacDeployOptions() 
                { 
                 BlockOnPossibleDataLoss = false 
                }); 

Исключение брошено по DacServices.Deploy для LocalDB 2016 года:

Microsoft.SqlServer.Dac.DacServicesException was unhandled by user code 
    HResult=-2146233088 
    Message=Could not deploy package. 
    Source=Microsoft.SqlServer.Dac 
    StackTrace: 
     at Microsoft.SqlServer.Dac.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) 
     at Microsoft.SqlServer.Dac.OperationExtension.Execute(IOperation operation, DacLoggingContext loggingContext, CancellationToken cancellationToken) 
     at Microsoft.SqlServer.Dac.DacServices.InternalDeploy(IPackageSource packageSource, Boolean isDacpac, String targetDatabaseName, DacDeployOptions options, CancellationToken cancellationToken, DacLoggingContext loggingContext) 
     at Microsoft.SqlServer.Dac.DacServices.Deploy(DacPackage package, String targetDatabaseName, Boolean upgradeExisting, DacDeployOptions options, Nullable`1 cancellationToken) 
     at Tv.Base.Test.Database.TestSqlLocalDb.CreateOrUpdateDatabaseIfNeeded(Boolean force) in D:\BuildAgent-02\work\6ec37398501798d0\src\Base.Test.Database\TestSqlLocalDb.cs:line 173 
     at Tv.Services.Inventory.DataAccess.Tests.InventoryDatabaseFixture..ctor() in C:\src\tv\services\inventory\test\DataAccess.Tests\InventoryDatabaseFixture.cs:line 40 
    InnerException: 
     HResult=-2146233088 
     Message=Unable to connect to target server. 
     Source=Microsoft.Data.Tools.Schema.Sql 
     StackTrace: 
      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__DisplayClass3.<>c__DisplayClass5.<CreatePlanInitializationOperation>b__1() 
      at Microsoft.Data.Tools.Schema.Sql.Dac.OperationLogger.Capture(Action action) 
      at Microsoft.SqlServer.Dac.DeployOperation.<>c__DisplayClass3.<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.DeployOperation.Microsoft.SqlServer.Dac.IOperation.Run(OperationContext context) 

«не удалось подключиться» ошибка кажется неправильным/может быть затемняют реальную ошибку, и потому, что указанная строка подключения позволяет мне подключиться к базе данных с использованием SqlConnection, и потому что я могу развернуть этот dacpac к SQL Server LocalDB 2016 года с помощью командной строки:

sqlpackage "/Action:publish" "/SourceFile:MyDatabase.dacpac" "/TargetConnectionString:Server=(localdb)\mssqllocaldb;Database=MyDatabase;Integrated Security=true" 

Более подробной информации о моей установке:

> sqllocaldb info mssqllocaldb 
Name:    MSSQLLocalDB 
Version:   13.0.1601.5 
Shared name: 
Owner:    DOMAIN\user 
Auto-create:  Yes 
State:    Running 
Last start time: 7/1/2016 5:09:43 PM 
Instance pipe name: np:\\.\pipe\LOCALDB#C1DD8548\tsql\query 

> sqllocaldb v 
Microsoft SQL Server 2014 (12.0.2000.8) 
Microsoft SQL Server 2016 (13.0.1601.5) 

используется Microsoft.SqlServer.Dac сборки из этого пакета NuGet : https://www.nuget.org/packages/Microsoft.SqlServer.Dac

+0

каким образом это провал? –

+0

Извините - я случайно отправил этот вопрос, прежде чем я его написал, добавив новый тег, вызвавший это. – crimbo

+1

Прохладный, что делает «sqllocaldb info mssqllocaldb» и «sqllocaldb v»? –

ответ

4

чтобы исправить это было действительно обновить версию Microsoft.SqlServer.Dac сборок, которые мы использовали, - я обнаружил, что я должен попробовать, что незадолго до встречи @ Кевин-Cunnane «s предложение.

Существовал несколько факторов, которые сделали это менее очевидно, поэтому это на SO:

  1. сообщения об ошибке ЦАП «Не удались подключиться к целевому серверу» не указует на версию несовместимости в любом случае , Однако, из-за того, что он звонит по интернету (например, DACPAC won't deploy because 'can't connect to server'?), кажется, что это сообщение об ошибке может означать несовместимость версий в дополнение к неправильной строке подключения, проблеме брандмауэра и т. Д.
  2. Существует несколько пакетов NuGet, которые содержат Microsoft.SqlServer.Dac и связанные сборки. Некоторые из них не поддерживаются Microsoft, включая тот, который я использовал (Microsoft.SqlServer.Dac). Официальный выпуск Microsoft не был доступен на NuGet.org до июня 2016 года, и он не имеет наиболее очевидного идентификатора NuGet (Microsoft.SqlServer.DacFx.x64). Так что работа update-package Microsoft.SqlServer.Dac не имела желаемого эффекта.
  3. «Официальный» пакет NuGet не указан нигде на страницах MSDN + ЦАП - вы бы подумали, что это будет упомянуто здесь: https://msdn.microsoft.com/en-us/library/dn702988%28v=sql.120%29.aspx - но это не так.
  4. Visual Studio 2016 устанавливает SQL LocalDB 2016, а его делает, включая правильные сборки Dac (C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\130\Microsoft.SqlServer.Dac.dll), но они не установлены в GAC или в противном случае легко доступны.

Исправление, работал был

# Remove the old NuGet dependencies 
uninstall-package Microsoft.SqlServer.Dac 

# Install the new Dac NuGet package 
Install-Package Microsoft.SqlServer.DacFx.x64 

запросы для команды Дак, если вам случится увидеть это:

  • Пожалуйста, ссылку на правильный пакет NuGet из документации MSDN
  • Пожалуйста, улучшите сообщение об ошибке, чтобы указать, что требуется новое клиентское программное обеспечение
  • Просьба запросить другой NuG et al., чтобы отметить наличие официального пакета NuGet или предоставить обновление, которое ссылается на официальный пакет NuGet, b/c наличие нескольких пакетов может вызвать тоску.

(Кстати, несмотря на трудность здесь, Дак/SSDT является УДИВИТЕЛЬНЫМ. Я не видел ни сравнимого Dev инструментов для любых конкурентных реляционных баз данных.)

+1

Спасибо Crimbo, мы рассмотрим обновление документа. Один вопрос - неофициальный Dac nuget - это то, что используется многими людьми. Удалил бы это, не ударил бы/сломал бы их? Это причина, по которой мы не настаивали на этом. Мы пытаемся сбалансировать официальную поддержку там, избегая негативного воздействия на существующих пользователей. –

+0

Вы правы, Кевин, сняв его, будет слишком разрушительным. Я удалю это предложение. Как насчет других параметров, например, попросить автора развернуть новый пакет nuget, который пуст, имеет правильную версию # (13.0), но имеет зависимость от правильного пакета nuget? Или, как минимум, заметку на странице NuGet. – crimbo

+0

Мы можем, конечно, спросить об этом - мы уже связались с ними, и они рады помочь нам получить официальную версию с хорошей поддержкой –

Смежные вопросы