sql-server - 将引用 FSharp.Data.SqlProvider 的 SQL CLR 程序集注册到 SQL Server 时出现问题

标签 sql-server f# sqlclr type-providers

我有一个 F# DLL(.NET Framework 4.5.1、F# 4.1、FSharp.Core 4.4.3.0)。唯一添加的 NuGet 引用是 FSharp.Data.SqlProvider 1.1.41。

代码只在一个文件中

module DB

open FSharp.Data.Sql

[<Literal>]
let private dbVendor = Common.DatabaseProviderTypes.MSSQLSERVER

构建没有错误

将SQL Server中构建的dll作为程序集导入

CREATE ASSEMBLY [Library2] FROM '<path>\Library2.dll' WITH PERMISSION_SET = UNSAFE

操作失败并出现错误

Assembly 'Library2' references assembly 'fsharp.core, version=4.3.1.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: version, culture or public key mismatch). Please load the referenced assembly into the current database and retry your request

现在注释代码中的最后两行

//[<Literal>]
//let private dbVendor = Common.DatabaseProviderTypes.MSSQLSERVER

有了这个,SQL 程序集创建成功,程序集在 SQL Server 中正确创建

最后,如果我将项目降级到 F# 3.1 (FSharp.Core 4.3.1.0),那么在这两种情况下都没有错误

SQL 服务器 14.0.1000

Windows 10 专业版

请注意,项目 GitHub 存储库中已提出问题:Issue #541

问题

  • 有没有人认为我做的有问题?
  • 有没有人遇到过这样的问题并解决了?如果是,怎么做?

最佳答案

F# 不是原生支持的 SQLCLR 语言。我相信只有 C#、VB.NET 和 Visual C++ 是(当然,IL,如果你想直接编写它而不是使用愚蠢的编译器;)。

因此,如错误消息所述,您需要手动加载该 F# DLL,并将其标记为 UNSAFE

有关在 SQLCLR 中使用 F# 的更多详细信息,请参阅我的以下答案(也在 S.O. 上):

F# with sqlclr in a reasonably safe way and scripted assembly

关于sql-server - 将引用 FSharp.Data.SqlProvider 的 SQL CLR 程序集注册到 SQL Server 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50055163/

相关文章:

c# - 尝试部署 dapac : The path specified by File Ggroup FG. mdf 文件不在有效目录中时,SQL Linux docker 容器抛出错误

sql-server - SQL Server Compact 能否同时用作 SSIS 中的源和目标?

c# - 如何使用 Entity Framework 插入或选择

F# 如何将元素追加到列表末尾

f# - 并行化数组创建

sql - 是否可以找到用于在 SQL SERVER CLR 中加载程序集的原始路径?

tsql - t-sql 中的正确/标题案例

sql-server-2005 - 控制 SQL Server CLR 保留内存

sql - Sql 中的 NULL 检查

list - 自定义展开返回累加器