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 错误:目标参与者无效或为空。在 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

我意识到自从有人问这个问题以来已经有一段时间了,但无论如何我都会回答。

首先,我不清楚您要确切比较什么。您想比较项目的两个版本以查看差异,还是要将项目与数据库进行比较?

我注意到的一件事是您在命令行中指定了两次目标。首先,通过SqlScmpFilePath参数引用的 .scmp 文件包含源和目标。其次,目标参数还定义了一个目标。目标参数将覆盖 .scmp 文件中的任何内容。

但是,如果您的 .scmp 文件具有正确的源但您想在 .dacpac 文件中指定目标,那么这可能是故意的。

.dacpac 文件可以在构建后的 SSDT 项目的 bin\Debug 或 bin\Release 文件夹中找到。为了使您的命令正常工作,您需要确保“d:\target.dacpac”存在并且是这样的文件。

.scmp 文件是通过在 Visual Studio 中执行架构比较创建的,然后在选择源和目标后保存比较窗口。为了使您的命令正常工作,您需要确保“d:\sc.scmp”存在并且是这样的文件。

请让我知道这可不可以帮你。

于 2016-06-03T23:51:32.597 回答