2

コマンド ラインから MSBUILD を使用してスキーマ比較 (*.scmp) を実行することを検討しています。

ソリューション内にはいくつかのデータベースがあり、チームはソリューションへの変更 (ストア プロシージャ、テーブルなど) をチェックすることを常に覚えているとは限りません。Visual Studio は比較を表示できますが、エラーのリストをエクスポートする方法が見つからないため、チームを追跡することができません。スクリーンショットが唯一の方法のようです。

違いのリストを作成するためのツールがあるかどうかを確認できると思いました。次の例に出くわしました:

http://blogs.msdn.com/b/ssdt/archive/2014/07/15/msbuild-support-for-schema-compare-is-available.aspx

私はこの例を見ました:

C:\SampleProject > msbuild /t:SqlSchemaCompare /p:SqlScmpFilePath="d:\sc.scmp" /p:target="d:\target.dacpac" /p:TextOutput="d:\1.out" /p:Deploy="true

しかし、私はそれを機能させることができません。特定のセットアップに対して同等のものを実行すると、次のようになります。

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\SSDT\Microsoft.Data.Tools.Schema.SqlTask​​s.targets(843,5): SchemaCompare エラー: tar get 参加者が無効または空です。Microsoft.Data.Tools.Schema.Tasks.Sql.SqlSchemaCompareTask.Execute() で [C:\TFS\Argon_Main Solution_Latest R elease\Source\Blah\SomeData.DataDatabase.sqlproj]

誰かアイデアはありますか?

乾杯

4

2 に答える 2

1

先日、この問題に出くわしました。問題は、VisualStudioVersionコマンドライン引数を使用する必要があったことが判明しました。

msbuild /t:SqlSchemaCompare /p:VisualStudioVersion=14.0 /p:SqlScmpFilePath="MySchemaCompare.scmp" /p:target="MyConnectionString" /p:TextOutput="..\output.out"

ファイルMicrosoft.Data.Tools.Schema.SqlTasks.targetsは次の場所にあります。C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\{Your VS Version}\SSDT

于 2016-01-28T21:01:23.597 に答える
0

これが尋ねられてからしばらく経っていることに気づきましたが、とにかく答えます。

まず、何を正確に比較しようとしているのかがわかりません。プロジェクトの 2 つのバージョンを比較して相違点を確認しますか?それとも、プロジェクトをデータベースと比較しますか?

私が気づいたことの 1 つは、コマンド ラインでターゲットを 2 回指定していることです。まず、SqlScmpFilePathパラメーターを介して参照される .scmp ファイルには、ソースとターゲットが含まれています。次に、targetパラメータもターゲットを定義します。targetパラメーターは、.scmp ファイルの内容をオーバーライドします。

ただし、.scmp ファイルに適切なソースがあり、.dacpac ファイルでターゲットを指定したい場合、これは意図的なものかもしれません。

.dacpac ファイルは、ビルド後に SSDT プロジェクトの bin\Debug または bin\Release フォルダーにあります。コマンドが機能するには、「d:\target.dacpac」が存在し、そのようなファイルであることを確認する必要があります。

.scmp ファイルは、Visual Studio でスキーマ比較を実行し、ソースとターゲットを選択した後に比較ウィンドウを保存することによって作成されます。コマンドが機能するには、「d:\sc.scmp」が存在し、そのようなファイルであることを確認する必要があります。

これが役立つかどうか教えてください。

于 2016-06-03T23:51:32.597 に答える