无法在安装了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。问题:
- Can't find microsoft.sqlserver.batchparser.dll
- Where can i find "Microsoft.SqlServer.BatchParser.dll"?
编辑:
的最后一件事是检查是否也有一个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。
感谢srutzky的细节。我检查了上述详细信息,发现上述组件存在于安装了SQL Server 2012的Windows Server 2012中。 – 2014-11-13 14:18:24
@santoshkumarpatro:好的,我看到了你的答案。我刚更新了我的更多细节。不需要额外的项目就可以了。 – 2014-11-13 16:43:51