【问题标题】:Cannot Publish SQL Server Database Project because of .NET compatibility issues由于 .NET 兼容性问题,无法发布 SQL Server 数据库项目
【发布时间】:2020-12-13 01:02:57
【问题描述】:

我处于找不到解决方法的情况。

我正在尝试在 Visual Studio 2015 上开发一个 SQL CLR 项目,您可以在其中从 SQL 服务器执行 POST 和 GET HTTP 请求。我能够在控制台应用程序上实现我需要做的事情,然后我决定将它带到 SQL Server 数据库项目中。有问题的数据库具有 2008 的兼容性级别,这迫使我将项目的目标框架更改为 .NET 2.0,否则它不会发布。但是我使用的 Npgsql 和 Newtonsoft JSON 之类的引用要求项目是 .Net 4.6.1,否则它们不起作用。

我尝试手动创建程序集。但是数据库在像 192.168.x.x 这样的服务器中,我不知道将 dll 文件放在哪里才能创建汇编脚本。

我们将不胜感激任何帮助或建议。

更新: 所以按照 Solomon 的建议,我能够找到 Npgsql 和 Newtonsoft.json 的 .NET 2.0 兼容版本。我能够将 Newtonsoft.json 作为程序集添加到数据库中,但 Npgsql 不起作用。如果不是,它要求 Mono.Security.dll 与 Npgsql 位于同一文件夹中,并且当您将其添加到文件夹时,Mono.Security.dll 可能无法通过验证,可能是因为它是一个混合程序集。这是它给出的错误信息;

为程序集“Npgsql”创建程序集失败,因为程序集 “Mono.Security”验证失败。检查是否引用 程序集是最新且受信任的(对于 external_access 或不安全) 在数据库中执行。 CLR 验证程序错误消息(如果有) 关注这条消息

我将尝试通过使用 ODBC 找到解决此解决方法的方法。

【问题讨论】:

    标签: c# sql-server clr sqlclr


    【解决方案1】:

    使用 SQL Server 2008,您最多可以执行 .NET Framework 3.5 版,但不能超过此版本。从 SQL Server 2012 开始,您可以使用 .NET Framework 的 4.x 版本。没有办法解决这个问题。如果您需要使用 3rd 方程序集,您需要获取 .NET Framework 2.0 - 3.5 版的预编译版本,或者获取允许您针对其中一个版本进行编译的源代码版本。

    就程序集的部署而言,您永远不应从 DLL 进行部署,因为这是部署脚本的外部依赖项,可能会丢失,或者基于谁在执行 CREATE ASSEMBLY 语句而存在文件系统权限问题等 Visual Studio / SSDT 应该 生成正确的 CREATE ASSEMBLY ... FROM 0x.... 语句,该语句使用 VARBINARY 文字 / (文档中调用的十六进制字节),但如果不是,那么您可以始终使用我写的一个简单的开源命令行实用程序将 DLL 转换为 0x... 二进制字符串:BinaryFormatter

    有关使用 SQLCLR 的更多信息,请访问:SQLCLR Info

    【讨论】:

    • 好的,谢谢你的建议。我一直在寻找支持 .net 2.0 的旧版本,并在事实上找到了它们。但这次我得到“在 SQL 目录中找不到 npgsql”。发布时出错。请问您有什么可以提供的帮助吗?
    • @HakanAliYasdi 很高兴您能够找到 Json.NET 的 2.0 版本。至于 NpgSQL,那将是一回事:找到一个适用于 CLR 2.0 的版本(因此是框架版本 2.0 - 3.5)并将其上传到需要它的程序集之前。
    • @SolomonRotzky 我会尝试并尽快提供反馈。谢谢你的回答。
    猜你喜欢
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多