1

SQL Server 2012 がインストールされている Windows サーバー 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 ボックスと、SQL SERVER 2008 R2 がインストールされているボックス (Windows Server 2008 R2) でも正常に動作しています。SQL SERVER 2012 がインストールされている新しいボックスでテストしようとすると、問題が発生しました。

誰でもこの問題を解決するのを手伝ってもらえますか?

4

2 に答える 2

2

動作するマシンと動作しないマシンの間で環境変数を確認してください。これは、コマンド プロンプトを開いて MSBuild を実行していることを前提としています。

私のマシンには SQL Server 2012 がインストールされており、次の場所に BatchParser.DLL が見つかりました。

  • C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn
  • C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn
  • C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn

したがって、エラーの原因として最も可能性が高いのは、これらのいずれかを指す環境変数がまったくないことです。

私が見る限り、それらは私のPATH変数にしかありません。

これらの場所のいずれにもこの DDL が見つからない場合は、次の SO の質問で説明されているように SMO をインストールする必要があります。

編集:
最後に確認することは、C:\Program Files (x86)\Microsoft SQL Server\100フォルダーも存在するかどうかです。このフォルダーには、DTS\Binnおよび/またはTools\Binnフォルダーが含まれます。私の推測では、エラーに基づいて

ファイルまたはアセンブリ 'Microsoft.SqlServer.BatchParser、バージョン = 10.0.0.0 を読み込めませんでした

SMO の 2008 バージョンを具体的に探していること。開発ボックスにはあるが、SQL 2012 のみを含む新しいボックスにはありません。オプションは次のとおりです。

  • 「batchparser.dll」を開発ボックスから新しい SQL 2012 サーバーに単純にコピーして、C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binnフォルダーに配置してみてください。
  • SMO を含むSQL Server 2008 R2 Feature Packを新しい SQL Server 2012 サーバーにダウンロードしてインストールします。「Install Instructions」セクションを展開し、「Microsoft® SQL Server® 2008 R2 Shared Management Objects」に移動して、適切な MSI を取得します。
于 2014-11-01T13:44:48.207 に答える