wpf*_*abe 4 .net c# sql-server ssms sqlclr
我试图在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
Run Code Online (Sandbox Code Playgroud)
...结果与我通过SSMS UI尝试的结果相同.

您正在尝试导入错误的DLL.这是"引用"DLL,而不是实际的"框架"DLL.以下将工作,因为我不仅尝试使用SQL Server 2012,但我还能够导入System.IO.Compression.FileSystem和执行System.IO.Compression.ZipFile.CreateFromDirectory():
这是必需的,因为您无法ASYMMETRIC KEY从.Net Framework DLL 创建:
ALTER DATABASE [{dbname}] SET TRUSTWORTHY ON;
Run Code Online (Sandbox Code Playgroud)至少你需要这个:
CREATE ASSEMBLY [System.IO.Compression]
FROM N'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Run Code Online (Sandbox Code Playgroud)如果你想使用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;
Run Code Online (Sandbox Code Playgroud)万一不是很明显,你的组件调用上述组件的方法还需要有一个PERMISSION_SET的EXTERNAL_ACCESS.
对于可能没有意识到这一点的人来说,要完全清楚:
Zip*类System.IO.Compression和System.IO.Compression.FileSystem程序集都是新的