在数据库上创建程序集时部署 SQL CLR 项目失败

2024-01-06

我用来创建程序集的服务器上的文件夹中有一个包含 3 个 dll 文件的文件夹。我首先尝试了以下代码,并收到一个错误,表示在服务器上找不到 system.data.datasetextensions.dll 文件,我将 dll 从我的计算机复制并粘贴到我的 clr 项目所在的同一文件夹中并尝试再次运行该命令。

Create Assembly OoplesCLR from 'c:\ooplesclr\OoplesFinanceCLR.dll' with Permission_set = SAFE
GO

将 dll 从我的计算机复制到服务器文件夹后,我现在收到此错误

Warning: The Microsoft .NET Framework assembly 'system.data.datasetextensions, version=4.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Msg 6218, Level 16, State 2, Line 1
CREATE ASSEMBLY for assembly 'OoplesFinanceCLR' failed because assembly 'System.Data.DataSetExtensions' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : System.Data.DataRowComparer::get_Default][mdToken=0x6000001][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::Equals][mdToken=0x6000004][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::GetHashCode][mdToken=0x6000005][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::.cctor][mdToken=0x6000006][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::.ctor][mdToken=0x6000002][offset 0x00000000] Code size is zero.
[ : System.Data.DataRowComparer`1[TRow]::get_Default][mdToken=0x6000003][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::CopyToDataTable[T]][mdToken=0x6000008][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::CopyToDataTable[T]][mdToken=0x6000009][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::CopyToDataTable[T]][mdToken=0x600000a][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::AsDataView[T]][mdToken=0x600000c][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::AsEnumerable][mdToken=0x6000007][offset 0x00000000] Code size is zero.
[ : System.Data.DataTableExtensions::AsDataView][mdToken=0x600000b][offset 0x00000000] Code size is zero.
[ : System.Data.EnumerableRowCollection::System.Collections.IEnumerable.GetEnumerator][mdToken=0x600000e][offset 0x00000000] Code size is zero.
[ : System.Data.EnumerableRowCollection::.ctor][mdToken=0x600000d][offset 0x00000000] Code size is zero.
[ : System.Data.EnumerableRowCollection`1[TRow]::System.Collections.IEnumerable.GetEnumerator][mdToken=0x600000f][offset 0x00000000] Code size is zero.

我做错了什么以及如何解决这个问题?

更新 1:我将数据库更改为可信,然后运行此命令,但出现了相同的错误:

使用 Permission_set = UNSAFE 从“c:\ooplesclr\System.Data.DataSetExtensions.dll”创建程序集 DataSetExtensions 去

更新 2:尝试在同一数据库上创建一个函数来运行程序集。我的用户定义函数是这样的:

public partial class UserDefinedFunctions
{
[SqlFunction]
public static SqlString CalculateInfo()
{
    // first get data from the tables and then process the data
    getData();
    // Put your code here
    return new SqlString ("test");
}

更新 3:我使用以下代码创建了该函数,没有任何警告或错误,但我无法运行它,因为它说不存在这样的存储过程...

GO
CREATE FUNCTION [dbo].[CalculateInfo]
( )
RETURNS NVARCHAR (MAX)
AS
 EXTERNAL NAME [OoplesCLR].[UserDefinedFunctions].[CalculateInfo]

更新 4:尽管它说不存在这样的存储过程,但我设法运行它并收到以下错误:

Msg 6522, Level 16, State 1, Line 4

执行用户定义例程或聚合“CalculateInfo”期间发生 .NET Framework 错误: System.Security.HostProtectionException:尝试执行 CLR 主机禁止的操作。

The protected resources (only available with full trust) were: All
The demanded resources were: Synchronization, ExternalThreading

System.Security.HostProtectionException: 
   at UserDefinedFunctions.getData()
   at UserDefinedFunctions.CalculateInfo()

我该如何修复这个异常?


首先,仅“支持”一小部分 .NET Framework 库。您可以在 MSDN 页面上找到该列表:支持的 .NET Framework 库 https://msdn.microsoft.com/en-us/library/ms403279.aspx. 系统.数据.数据集扩展不是其中之一。这就是你收到第一个错误的原因。

发布的第二件事是警告,而不是错误。它告诉您,您可能会遇到一个或多个 Microsoft 不会关心或修复的问题,因为您正在执行不受支持的操作。

在要部署程序集的数据库中运行以下命令:

SELECT * FROM sys.assemblies sa WHERE sa.is_user_defined = 1;

你应该看到两者。虽然如果系统.数据.数据集扩展有依赖库,它们不会自动加载,因为只有初始的文件夹CREATE ASSEMBLY指向将被加载,并且现在正在构建 DLL,而不是 .NET Framework 文件夹。

你最好还是加载一下系统.数据.数据集扩展就其本身而言CREATE ASSEMBLY指向适当的C:\Windows\Microsoft.NET\Framework(或 Framework64)文件夹。特别是如果您注意到错误消息显示“代码大小为零”,我仅在尝试从其中之一加载 DLL 时才看到该消息。参考组件文件夹。

现在,因为这是一个不受支持的库,所以它可能会执行一些禁止将其加载为SAFE。由于我们没有私钥信息,因此无法实现创建非对称密钥然后基于该非对称密钥进行登录的理想途径,因此您别无选择,只能:

  • 通过以下方式将您要部署的数据库设置为可信:

    ALTER DATABASE [DatabaseName] SET TRUSTWORTHY ON;
    
  • 加载程序集WITH PERMISSION_SET = UNSAFE

本质上:

USE [DatabaseName];

ALTER DATABASE CURRENT SET TRUSTWORTHY ON;

CREATE ASSEMBLY [System.Data.DataSetExtensions]
FROM
   'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Data.DataSetExtensions.dll'
WITH PERMISSION_SET = UNSAFE;

之后,您应该能够加载程序集,尽管它可能必须设置为UNSAFE以及。

我会删除的副本System.Data.DataSetExtensions.dll您放入构建文件夹中的文件。


有关 SQLCLR 的更多一般信息,请参阅我在 SQL Server Central 上撰写的系列文章:通往 SQLCLR 的阶梯 http://www.sqlservercentral.com/stairway/105855/(需要免费注册)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在数据库上创建程序集时部署 SQL CLR 项目失败 的相关文章

随机推荐

  • GAE 增加电子邮件收件人限制

    我的付费 App Engine 限制我只能发送 100 封邮件 我找不到任何文档来增加该限制 此外 它还表示 超过 100 封邮件将收取 0 00 100 美元的费用 我也找不到有关计费文档的任何信息 关于如何发送超过 100 封邮件并收取
  • 带有时区的节点 cron

    我有一个node http nodejs org v0 7 3 pre 服务器节点 cron https github com ncb000gt node cron 0 3 2 和节点时间 https github com TooTallN
  • android 3.0:JS scrollTop 不适用于 chrome/webview

    我已经通过 webView 编写了一个应用程序包装 它在我的 Milestone2 2 2 上按预期工作但滚动功能在 3 0 的 chrome 上不起作用 在 FF 中工作 既不是 dom scrollTop XXX 也不是 jquery
  • 如何在 WIX 中包含 msi/Setup.exe 的先决条件

    我正在尝试将我的包合并到一个安装 EXE 文件中并将其上传到 Internet 我创建了一个 Microsoft 引导程序 其中包含带有项目的 Setup exeMSI http en wikipedia org wiki Windows
  • Java Spring:通过 REST API 向客户端实时更新状态

    我正在 Java Spring 中开发一个 Web 应用程序 我希望用户能够从前端上传 CSV 文件 然后查看导入过程的实时进度 导入后他应该能够搜索单个条目从导入的数据 导入过程包括实际上传文件 通过 REST API POST 请求发送
  • 使用意图发送操作从 Android 应用程序共享图像是行不通的:(

    i m use Intent sharingIntent new Intent Intent ACTION SEND Uri screenshotUri Uri parse file res drawable u png sharingIn
  • 如何在Mysql Workbench GUI中查看表内容?

    如何在 Mysql Workbench GUI 中查看表内容 我的意思是 不是从命令行 首先从主屏幕打开到服务器的连接 SQL IDE 然后使用架构树中的上下文菜单来运行仅从所选表中选择行的查询 附加的限制是为了避免意外读取太多行 可以在首
  • 将消费计划上的 Azure Function App 设置为 64 位

    您可用于功能的新 消耗 层计划不允许您通过门户更改进程位数 我可以通过其他方式将进程翻转为 64 位 因为 DocDB 访问需要它 您可以通过 API 进行设置 但请注意 直到您看到该选项显示在门户中之前 它才得到正式支持 这是一个简单的方
  • iPhone Safari:滚动 html 容器内的列表

    我对此主题进行了大量研究 但尚未找到令人满意的答案 如何在其他 html 内容中制作可滚动列表 iPhone SDK 仪表板列表 如果我在 html 正文中创建一个列表并尝试滚动整个页面就会滚动 我知道有这种 双指 滚动 但这不是我想要的
  • 如何动态改变html元素的值?

    我试图在页面加载时在 UI 上加载初始参数虚拟数据 以便我可以使用真实数据进行自定义 因此在下面的代码中 当我在 UI 上更改并发送请求时 它总是采用最初加载到页面的 memberid 任何想法代码有什么问题吗 主要 html
  • 如何在opencart产品中设置自定义价格?

    我已经下载了最新版本的opencart 3 0 2 0 我的产品的定价取决于各种选项 即 尺寸 颜色 数量 对于数量 有没有默认设置价格范围的功能 例如1 500件一个价格 从501 1000折扣价 我的产品是腕带 所以我根据text他们想
  • 在技​​术绘图中绘制距离箭头

    我想在我的一幅图中指出距离 我想到的是他们在技术图纸中的做法 显示一个双头箭头 其旁边的距离为文本 Example from matplotlib pyplot import hlines 7 0 2 linestyles dashed h
  • 如何使用 ImageSharp 清除图像的 EXIF 数据?

    我发现一个 GitHub 问题 显示如何通过将其 ExifProfile 设置为 null 来删除图像的 exif 数据 SixLabors ImageSharp Image image Image Load imagePath remov
  • Kill -3 或 jstack :有什么区别?

    我想获取在 jboss 服务器上运行的 Web 应用程序的线程转储 我为我的问题找到了两个解决方案 使用unix命令 kill 3 使用JDK中存在的jstack工具 谁能向我解释这两种方法之间的区别 提前致谢 The jstack命令可以
  • 为什么 html 标签(s、strong)在 jasper 报告中不起作用?

    我添加了静态文本 html 标签 但单击预览后粗体和删除线无法正确显示 此外 当从数据库加载数据时 它无法正确显示 有什么解决办法吗 Jasper Report不支持所有html标签 支持的标签定义在样式文本示例 http jasperre
  • 导出的 pdf 中缺少 Jupyter 笔记本 matplotlib 数字

    在 jupyter 笔记本中生成 pdf 时 一切都很好 但我想将内联数字保留在 pdf 以及笔记本中 这是我的代码 matplotlib notebook import matplotlib pyplot as plt import nu
  • Xcode 7.3 - 警告未显示且无法搜索项目

    自从我升级到 Xcode 7 3 以来 我注意到在搜索工作区时总是 没有结果 并且警告窗格中也没有显示任何警告 有时它会工作几分钟然后再次死机 重新启动我的电脑 Xcode 然后重新安装都没有帮助 还有其他人遇到过这种情况或找到解决方案 解
  • 错误:预期声明说明符或“list_node”之前的“...”

    我有一个 Catalog h 文件 typedef struct node list node struct node operationdesc op ptr list node next 和一个 parser h 与此 include
  • 为什么我需要 DJANGO_SETTINGS_MODULE 设置?

    每次通过 SSH 登录服务器时 我都需要输入以下内容 export DJANGO SETTINGS MODULE settings 如果我不使用manage py模块就会失败 我的manage py添加了以下代码 if notificati
  • 在数据库上创建程序集时部署 SQL CLR 项目失败

    我用来创建程序集的服务器上的文件夹中有一个包含 3 个 dll 文件的文件夹 我首先尝试了以下代码 并收到一个错误 表示在服务器上找不到 system data datasetextensions dll 文件 我将 dll 从我的计算机复