You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

注册引用FSharp.Data.SqlProvider的SQL CLR程序集至SQL Server时出错

解决F# DLL导入SQL Server CLR程序集失败的问题

你遇到的核心问题是SQL Server CLR环境缺少你的F# DLL依赖的组件——你的项目依赖了FSharp.Core和FSharp.Data.SqlProvider,但这些组件并没有在SQL Server的CLR环境中注册,所以导入时会触发引用缺失的报错。下面是具体的排查和解决步骤:

1. 先定位具体缺失的依赖

仔细查看报错信息里“references ...”后面的内容,明确是哪个程序集没被找到。通常会是以下两类:

  • FSharp.Core, Version=4.4.3.0:你的项目使用的F#核心类库
  • FSharp.Data.SqlProvider或其关联依赖:你引入的NuGet包组件

2. 手动导入FSharp.Core到SQL Server

SQL Server自带的FSharp.Core版本大概率和你使用的4.4.3.0不匹配,所以需要导入你项目里对应的FSharp.Core.dll:

CREATE ASSEMBLY [FSharp.Core]
FROM '<你的项目依赖路径>\packages\FSharp.Core.4.4.3.0\lib\net45\FSharp.Core.dll'
WITH PERMISSION_SET = UNSAFE;

说明:UNSAFE权限是因为FSharp.Core包含一些SQL Server CLR环境限制的操作,用EXTERNAL_ACCESS大概率会失败,可根据实际测试调整。

3. 处理FSharp.Data.SqlProvider的特殊情况

这里要重点提醒:FSharp.Data.SqlProvider的设计定位是应用层/客户端的数据库访问工具,并不适合在SQL Server CLR环境中运行。它依赖了大量非SQL Server原生支持的.NET组件,强行导入可能会引发更多兼容性问题。

如果你的代码必须保留这个依赖,那需要:

  • 找出FSharp.Data.SqlProvider.dll及其所有关联依赖(比如FSharp.Data.dll等)
  • 逐个将这些DLL用CREATE ASSEMBLY语句导入SQL Server,权限同样设为UNSAFE

但更稳妥的方案是:移除对FSharp.Data.SqlProvider的依赖,改用SQL Server CLR原生支持的System.Data.SqlClient等库编写数据库逻辑,这样能大幅减少依赖数量,避免后续的兼容性坑。

4. 确保SQL Server CLR功能已启用

如果你的SQL Server还没开启CLR支持,先执行以下命令启用:

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'clr enabled', 1;
RECONFIGURE;

若是SQL Server 2017及以上版本,默认开启了clr strict security,可能需要先关闭它(或者给所有程序集添加强签名):

sp_configure 'clr strict security', 0;
RECONFIGURE;

5. 最后导入你的Library2.dll

当所有依赖都成功导入后,再执行你最初的导入命令:

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

内容的提问来源于stack exchange,提问作者Franco Tiveron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:58:42