无法在安装了SQL Server 2012的Windows Server 2012上使用msbuild运行dbdeploy组件

问题描述:

我想在安装SQL Server 2012的Windows Server 2012上使用MSBuild运行dbdeploy组件。无法在安装了SQL Server 2012的Windows Server 2012上使用msbuild运行dbdeploy组件

在运行的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的新框中进行测试,就会出现问题。

任何人都可以帮助我解决这个问题吗?

我进一步分析了这个问题,发现我需要更新dbDeploy组件。我使用DbDeploy.Net 2更新了现有项目,网址为:http://dbdeploynet2.codeplex.com/,然后根据上述示例对现有的msbuild脚本进行更改,并且它对我开始正常工作。在这个实现之后,我遇到的唯一问题是DedicatedAdminConnection =“True”的用法是再提供一个与SQL连接有关的错误。因此,我最好不要在msbuild脚本中使用DedicatedAdminConnection =“True”。

检查您的环境变量之间的工作机器和没有工作。这假定您打开命令提示符,然后运行MSBuild。

我有SQL Server 2012的安装在我的机器上,发现BatchParser.DLL在:

  • C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 110 \ DTS \ BINN
  • C:\程序文件(x86)\ Microsoft SQL Server的\ 110个\ TOOLS \ BINN
  • C:\ Program Files文件(x86)的\ Microsoft SQL Server的\客户端SDK \ ODBC \ 110个\ TOOLS \ BINN

因此,最可能的原因是你缺少一个环境变量完全可以指出其中之一。

据我所知,它们只在我的PATH变量中。

如果您无法在任何这些位置找到此DDL,则需要按照这些S.O.中所述安装SMO。问题:

编辑:
的最后一件事是检查是否也有一个C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 100文件夹,该文件夹将包含DTS \ Binn和/或Tools \ Binn文件夹。我的猜测是,基于错误是

Could not load file or assembly 'Microsoft.SqlServer.BatchParser, Version=10.0.0.0

,它是专门找2008版本SMO的,那你的开发框有,但不是在具有SQL 2012只新箱的东西。你的选择是,然后:

  • 尝试简单地复制从您的dev的盒子 “batchparser.dll” 转移到新的SQL 2012服务器,并将其放置在C:\ Program Files文件(x86)的\ Microsoft SQL Server的\ 110 \ Tools \ Binn文件夹。
  • 在新的SQL Server 2012服务器上下载并安装包含SMO的SQL Server 2008 R2 Feature Pack。展开“安装说明”部分并转到“Microsoft®SQLServer®2008 R2共享管理对象”以获取正确的MSI。
+0

感谢srutzky的细节。我检查了上述详细信息,发现上述组件存在于安装了SQL Server 2012的Windows Server 2012中。 – 2014-11-13 14:18:24

+0

@santoshkumarpatro:好的,我看到了你的答案。我刚更新了我的更多细节。不需要额外的项目就可以了。 – 2014-11-13 16:43:51