首页 > 解决方案 > 需要在 Visual Studio 数据库项目中明确指定 Microsoft.Data.Tools.Schema.Tasks.Sql 版本

问题描述

我的情况有点复杂,希望我能正确解释:我有一个 Visual Studio 解决方案,用于构建 WiX 安装程序。除其他外,此安装程序通过 dacpac 部署 SQL DB 模式。此 dacpac 由同一解决方案中的 SQL Server 2014 项目生成。

当前,当它到达需要部署生成的 dacpac 的步骤时,安装会失败。错误如下:

Microsoft.Data.Tools.Schema.Sql.Deployment.DeploymentFailedException: The Element or Annotation class PersistedResolvableAnnotation does not contain the Property class Length. ---> 
Microsoft.Data.Tools.Schema.SchemaModel.ModelSerializationException: The Element or Annotation class PersistedResolvableAnnotation does not contain the Property class Length.

这与此线程中描述的情况类似较新的 SqlPackage.exe 版本对我不起作用。

此外,部署 dacpac 文件的解决方案中的自定义操作项目绑定到 .net 4.5.1。这是一个产品限制,因此使用更新的 .net 版本对我来说也不是解决方案。

  <package id="Microsoft.DataTierAppFramework" version="12.0.1295" targetFramework="net451" />

不兼容的原因是 dacpac 文件以某种方式针对较新的 Data.Tools.Schema 版本生成。从 dacpac 中的 Origin.xml 中提取:

<ProductName>Microsoft.Data.Tools.Schema.Tasks.Sql, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</ProductName>
<ProductVersion>14.0.60519.0</ProductVersion>

这会导致 dacpac 文件中的 model.xml 包含部署自定义操作使用的 Microsoft.Data.Tools.Schema.Sql.Deployment 版本 12 无法理解的一些花哨的标签(如错误消息中所示)。

所以我想我唯一的解决方案是明确告诉 Visual Studio 使用 Data.Tools.Schema 的 12 版生成 dacpac 文件,而不是默认选择 14 版,但我在数据库中没有找到任何位置可以指定 Data.Tools.Schema 版本的项目属性。我想 VS 只是获得了它可以在构建机器上找到的最新 DAC 版本并基于它生成 dacpac。

有谁知道如何做到这一点?还是我目前没有看到其他解决方案?

标签: sql-serverwixdacpacsqlpackagedata-tier-applications

解决方案


在数据库项目中,转到选项卡 Project -> properties ...

在项目设置中,选择适当的目标平台。

例如,SQL Server 2017 将生成 dacpac 版本 14。对于版本 12,选择 SQL Server 2014。

保存设置并重新编译项目。


推荐阅读