gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:40:46 24 4
gpt4 key购买 nike

我正在尝试在 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 尝试时的结果相同。

Error prompt from SSMS

最佳答案

您正在尝试导入错误的 DLL。那是“引用”DLL,而不是实际的“框架”DLL。以下将起作用,因为我不仅使用 SQL Server 2012 尝试过它,而且还能够导入 System.IO.Compression.FileSystem并执行 System.IO.Compression.ZipFile.CreateFromDirectory() :

  1. 这是必需的,因为您无法创建 ASYMMETRIC KEY来自 .Net Framework DLL:

    ALTER DATABASE [{dbname}] SET TRUSTWORTHY ON;
  2. 至少你需要这个:

    CREATE ASSEMBLY [System.IO.Compression]
    FROM N'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IO.Compression.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS;
  3. 如果您想使用 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;
  4. 以防万一,调用上述程序集中方法的程序集也需要有一个 PERMISSION_SET。的 EXTERNAL_ACCESS .

  5. 对于可能不知道这一点的任何人来说,这是完全清楚的:

    1. Zip*类以及 System.IO.CompressionSystem.IO.Compression.FileSystem程序集是 .Net 4.5 的新内容
    2. 您只能在 SQL Server 2012 和 2014(当前版本)中使用 .Net 4.0/4.5 的新项目; SQL Server 2005/2008/2008 R2 卡在.Net 2.0 系列上。

关于c# - 无法将 System.IO.Compression 添加到 SQL Server 中的受信任程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24835036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com