我试图在NET 4.5中创建一个SQLCLR存储过程,摆弄ZIP文件.显然System.IO.Compression不在SQL Server的批准列表上,但这是我尝试通过SQL Server Management Studio手动添加它时得到的.如果我尝试通过查询执行CREATE ASSE...
![](https://oss.womengda.net/imgfile/2310/1ER2F5215M0-15O2.jpg)
我试图在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中的受信任程序集
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- C#高效反射调用方法类实例详解 2023-01-27
- C#判断语句的表达式树实现 2023-05-16
- Unity3D实现批量下载图片功能 2022-12-30
- C# 利用VS编写一个简单的网游客户端 2023-05-11
- C#通过KD树进行距离最近点的查找 2022-11-15
- c# – Krypton(Winforms库)是否可能存在内存泄漏问题 2023-09-19
- 详解如何在C#/.NET Core中使用责任链模式 2023-02-17
- 浅谈C#六大设计原则 2023-03-03
- c# – 等待HttpWebRequest.BeginGetResponse在Windows Phone 7中完成 2023-09-19
- C#并发编程入门教程之概述 2023-01-16