sql-server - 需要在 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。
有谁知道如何做到这一点?还是我目前没有看到其他解决方案?
解决方案
在数据库项目中,转到选项卡 Project -> properties ...
在项目设置中,选择适当的目标平台。
例如,SQL Server 2017 将生成 dacpac 版本 14。对于版本 12,选择 SQL Server 2014。
保存设置并重新编译项目。
推荐阅读
- python - 使用pyinstaller和pygsheet出错,求解决
- python - 如何用条件pandas python替换另一列中的列的值
- javascript - 如何仅为 javascript 文件生成 .d.ts 文件?
- sql - 如果满足表 2 的值的特定条件,SQL 将一个表中的列名与另一个表中的值进行比较
- google-apps-script - 输出以逗号分隔的单词列表中的单词位置的脚本/公式
- java - ANTLR 函数作为参数
- react-native - TextInput 显示来自 get Api 的值,更新后显示反应原生的新值
- shell - 在文件中打印更大和更少的数字
- bpmn - 如果camunda工作流程中存在流程变量,如何使用表达式检查?
- unit-testing - 为 OrderSummary 或其他生成的对象创建单元测试