数据库
首页 > 数据库> > c# – 无法将System.IO.Compression添加到SQL Server中的受信任程序集

c# – 无法将System.IO.Compression添加到SQL Server中的受信任程序集

作者:互联网

我试图在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;

>如果你想使用ZipFileZipFileExtensions类,你将需要这个(不幸的是,这个需要设置为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,net,sql-server,ssms,sqlclr
来源: https://codeday.me/bug/20190612/1224992.html