我试图在NET 4.5中创建一个SQLCLR存储过程,摆弄ZIP文件.显然System.IO.Compression不在SQL Server的批准列表上,但这是我尝试通过SQL Server Management Studio手动添加它时得到的.如果我尝试通过查询执行CREATE ASSE...

我试图在NET 4.5中创建一个SQLCLR存储过程,摆弄ZIP文件.显然System.IO.Compression不在SQL Server的批准列表上,但这是我尝试通过SQL Server Management Studio手动添加它时得到的.如果我尝试通过查询执行CREATE ASSEMBLY,也会发生同样的情况.有任何想法吗?为什么这是禁忌?
我也尝试在SSMS中运行此命令:
CREATE ASSEMBLY SystemIOCOMPRESSION
FROM 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.IO.Compression.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
…结果与我通过SSMS UI尝试的结果相同.
解决方法:
您正在尝试导入错误的DLL.这是“引用”DLL,而不是实际的“框架”DLL.以下将工作,因为我不仅尝试使用SQL Server 2012,但我还能够导入System.IO.Compression.FileSystem并执行System.IO.Compression.ZipFile.CreateFromDirectory():
>这是必需的,因为您无法从.Net Framework DLL创建ASYMMETRIC KEY:
ALTER DATABASE [{dbname}] SET TRUSTWORTHY ON;
>至少你需要这个:
CREATE ASSEMBLY [System.IO.Compression]
FROM N'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
>如果你想使用ZipFile或ZipFileExtensions类,你将需要这个(不幸的是,这个需要设置为UNSAFE):
CREATE ASSEMBLY [System.IO.Compression.FileSystem]
FROM N'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.FileSystem.dll'
WITH PERMISSION_SET = UNSAFE;
>为了防止它不明显,调用上述程序集中的方法的程序集也需要具有EXTERNAL_ACCESS的PERMISSION_SET.
>对于任何可能没有意识到这一点的人来说,要完全清楚:
> Zip *类以及System.IO.Compression和System.IO.Compression.FileSystem程序集是.Net 4.5的新增功能
>您只能在SQL Server 2012和2014(当前版本)中使用.Net 4.0 / 4.5的新项目; SQL Server 2005/2008 / 2008 R2停留在.Net 2.0系列上.
本文标题为:c# – 无法将System.IO.Compression添加到SQL Server中的受信任程序集


基础教程推荐
- C#窗体实现酒店管理系统 2023-06-27
- C#调用python脚本的方法步骤(2种) 2023-02-03
- 使用.NET Core创建Windows服务 - 使用.NET Core工作器方式 2023-09-26
- C# PictureBox图片控件实现图片交换 2023-04-21
- C# SynchronizationContext以及Send和Post使用解读 2023-07-19
- 用C#编写Windows10的toast的注意事项。 2023-09-19
- 10分钟 在linux里创建.net core helloworld控制台程序 2023-09-28
- C# 实现俄罗斯方块(附源码) 2023-03-04
- C#中的var关键字用法介绍 2023-07-04
- c# – 将集合绑定到Windows窗体中的DataGridView 2023-09-19