我试图在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-21
- C#实现winform版飞行棋 2023-04-27
- C# PictureBox控件方法参数及图片删除重命名上传详解 2023-06-28
- C#面向对象设计原则之里氏替换原则 2023-05-25
- c# – 如何克服Windows运行时类型的Windows组件限制? 2023-09-20
- WPF实现列表分页控件的示例代码 2023-07-04
- C# dataset存放多张表的实例 2023-03-29
- C# 中使用Stopwatch计时器实现暂停计时继续计时功能 2023-05-25
- C# 8.0中的范围类型(Range Type)示例详解 2023-01-06
- Unity实现游戏卡牌滚动效果 2023-01-16