1

我正在尝试将 CLR 程序集加载Split.dll到 SQL Server 2017 数据库中:

从“D:\SqlClr\split.dll”创建程序集拆分,权限设置 = SAFE GO

我已经使用 Visual Studio 2019 构建了这个程序集。但是我收到了这个错误:

消息 10301,级别 16,状态 1,第 1 行
程序集“拆分”引用程序集“netstandard,版本=2.0.0.0,文化=中性,publickeytoken=cc7b13ffcd2ddd51.”,当前数据库中不存在。SQL Server 试图从引用程序集所在的同一位置定位并自动加载引用程序集,但该操作失败(原因:2(系统找不到指定的文件。))。请将引用的程序集加载到当前数据库中,然后重试您的请求。

我尝试对 SQL Server 2014 和 Visual Studio 2015 执行相同的操作。实际上,我使用相同的 C# 代码来获取 DLL,并使用相同的 SQL 语句(如上所示)来加载它。在这种情况下,一切都运行良好。

我读过Sql Server CLR 加载程序集失败,但是当我尝试加载时netstandard.dll

CREATE ASSEMBLY netstandard 
AUTHORIZATION dbo 
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\netstandard.dll' 
WITH Permission_set = SAFE
GO

我收到此错误:

消息 6212,级别 16,状态 1,第 1 行
CREATE ASSEMBLY 失败,因为安全程序集“System.Diagnostics.Tracing”中类型“System.Diagnostics.Tracing.EventCounterGroup”的方法“EnsureEventSourceIndexAvailable”正在存储到静态字段。在安全程序集中不允许存储到静态字段。

有谁能够帮我?为什么相同的代码在 SQL Server 2014 和 Visual Studio 2015 中内置的 DLL 中运行良好,而我现在遇到问题(SQL Server 2017、Visual Studio 2019)?解决这个问题的方法是什么?

4

1 回答 1

1

只是为了快速澄清,因为在我自己寻找解决方案的过程中,我一定已经从这个问题中反弹了几次。答案其实已经在上面的评论中给出了……我一开始只是没看评论。问题是我选择了错误的框架。.Net 标准框架显示在列表的顶部......正确的框架位于列表的下方,因此很容易(至少对我而言)错过:在此处输入图像描述

于 2020-05-11T15:09:38.833 回答