Невозможно запустить компонент dbdeploy с помощью msbuild на Windows Server 2012, где установлен SQL Server 2012

Я пытаюсь запустить компонент dbdeploy с помощью MSBuild на Windows Server 2012, где установлен SQL Server 2012.

При запуске сценария msbuild я получаю следующую ошибку:

"E:\TestDeployment\Test.proj" (UpgradeDatabase target) (1) ->(dbDeploy target) ->
  E:\TestDeployment\Test.proj(212,5): error : Unexpected System.IO.FileNotFoundException
error executing SQL command: -- BEGINNING TRANSACTION\r
E:\TestDeployment\Test.proj(212,5): error : PRINT 'Beginning transaction'\r
E:\TestDeployment\Test.proj(212,5): error : BEGIN TRANSACTION \r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : -- Drop Table ChangeLog\r
E:\TestDeployment\Test.proj(212,5): error : Print 'Checking for Table ChangeLog'\r
E:\TestDeployment\Test.proj(212,5): error : IF (NOT EXISTS(SELECT * FROM sys.objects WHER
E [object_id] = OBJECT_ID(N'[dbo].ChangeLog') AND [type]='U'))\r
E:\TestDeployment\Test.proj(212,5): error : BEGIN\r
E:\TestDeployment\Test.proj(212,5): error :         CREATE TABLE dbo.ChangeLog \r
E:\TestDeployment\Test.proj(212,5): error :         (\r
E:\TestDeployment\Test.proj(212,5): error :                 change_number INTEGER NOT NUL
,\r
E:\TestDeployment\Test.proj(212,5): error :                 delta_set VARCHAR(10) NOT NUL
,\r
E:\TestDeployment\Test.proj(212,5): error :                 start_dt DATETIME NOT NULL,\r
E:\TestDeployment\Test.proj(212,5): error :                 complete_dt DATETIME NULL,\r
E:\TestDeployment\Test.proj(212,5): error :                 applied_by VARCHAR(100) NOT N
LL,\r
E:\TestDeployment\Test.proj(212,5): error :                 description VARCHAR(500) NOT
ULL\r
E:\TestDeployment\Test.proj(212,5): error :         )\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error :         IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN
IF @@TRANCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error :                 \r
E:\TestDeployment\Test.proj(212,5): error :         ALTER TABLE ChangeLog ADD CONSTRAINT
PK_ChangeLog PRIMARY KEY (change_number, delta_set)\r
E:\TestDeployment\Test.proj(212,5): error :         IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN
IF @@TRANCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN IF @@TRA
NCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : UPDATE dbo.ChangeLog SET complete_dt = getdat
e() WHERE complete_dt IS NULL\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : IF @@ERROR<>0 OR @@TRANCOUNT=0 BEGIN IF @@TRA
NCOUNT>0 ROLLBACK SET NOEXEC ON END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : -- COMMITTING TRANSACTION\r
E:\TestDeployment\Test.proj(212,5): error : IF @@TRANCOUNT>0\r
E:\TestDeployment\Test.proj(212,5): error : BEGIN\r
E:\TestDeployment\Test.proj(212,5): error :         PRINT 'Committing transaction'\r
E:\TestDeployment\Test.proj(212,5): error :         COMMIT TRANSACTION \r
E:\TestDeployment\Test.proj(212,5): error : END\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error : \r
E:\TestDeployment\Test.proj(212,5): error : SET NOEXEC OFF\r
E:\TestDeployment\Test.proj(212,5): error : GO\r
E:\TestDeployment\Test.proj(212,5): error :
E:\TestDeployment\Test.proj(212,5): error : Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.

Приведенный выше скрипт отлично работает в моем окне Dev, а также в окне (Windows Server 2008 R2), где установлен SQL SERVER 2008 R2. Проблемы начались после того, как я попытался проверить его на новом окне, где установлен SQL SERVER 2012.

Может ли кто-нибудь помочь мне решить эту проблему?

2 ответа

Решение

Я проанализировал проблему и обнаружил, что мне нужно обновить компонент dbDeploy. Я обновил существующий проект с помощью DbDeploy.Net 2, который можно найти по URL-адресу: http://dbdeploynet2.codeplex.com/ а затем внес изменения в существующий сценарий msbuild на основе упомянутых примеров, и он начал работать нормально для меня. Единственная проблема, с которой я столкнулся после этой реализации, это использование DedicatedAdminConnection="True", которое вызывало еще одну ошибку, связанную с подключением SQL. Поэтому я предпочел не использовать DedicatedAdminConnection="True" в сценариях msbuild.

Проверьте переменные окружения между машиной, которая работает, и той, которая не работает. Это предполагает, что вы открываете командную строку, а затем запускаете MSBuild.

Я установил SQL Server 2012 на мою машину и обнаружил BatchParser.DLL в:

  • C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DTS\Binn
  • C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ Инструменты \ Binn
  • C: \ Program Files (x86) \ Microsoft SQL Server \ Client SDK \ ODBC \ 110 \ Tools\Binn

Таким образом, наиболее вероятной причиной ошибки является отсутствие переменной среды, которая указала бы на одну из них.

Насколько я вижу, они только в моем PATH переменная.

Если вы не можете найти этот DDL ни в одном из этих мест, вам необходимо установить SMO, как описано в следующих вопросах SO:

РЕДАКТИРОВАТЬ:
Последнее, что нужно проверить, это наличие папки C:\Program Files (x86)\Microsoft SQL Server\100, в которой бы находились папки DTS\Binn и / или Tools\Binn. Я предполагаю, что, основываясь на ошибке

Не удалось загрузить файл или сборку 'Microsoft.SqlServer.BatchParser, версия =10.0.0.0

что он специально ищет версию SMO 2008, то есть то, что есть у вашего dev-бокса, но не в новом боксе, в котором есть только SQL 2012. Ваши варианты тогда:

  • Попробуйте просто скопировать файл "batchparser.dll" из своего блока разработки на новый сервер SQL 2012 и поместить его в папку C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn.
  • Загрузите и установите пакет новых компонентов SQL Server 2008 R2, который включает SMO, на новый сервер SQL Server 2012. Разверните раздел "Инструкции по установке" и перейдите к "Общие объекты управления Microsoft® SQL Server® 2008 R2", чтобы получить соответствующий MSI.
Другие вопросы по тегам