尝试使用CLR集成从我构建的DLL创建存储过程以便在SQL中使用。我认为我需要一个签名版本的System.Net.Http,下面将解释原因。欢迎提供任何建议或技巧。
如果我使用命令,则解决方案可完美运行。
使用v4.0_2.0.0.0__b03f5f7f11d50a3a时出错,因为现有策略将阻止安装程序集'System.Net.Http'的使用。使用v4.0_4.0.0.0__b03f5f7f11d50a3a时出错,因为在安全程序集'System.Net.Http'中的类型'System.Net.Http.HttpContent'具有静态字段'EncodingsWithBom'。安全程序集中静态字段的属性必须在Visual C#中标记为readonly,在Visual Basic中标记为ReadOnly,或在Visual C++和中间语言中标记为initonly。这让我相信我需要一个已签名的'System.Net.Http'版本。
如果我使用命令,则解决方案可完美运行。
ALTER DATABASE test2 SET TRUSTWORTHY ON
接着我使用以下命令创建程序集:
CREATE ASSEMBLY [System.Net.Http]
AUTHORIZATION dbo
FROM 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll'
WITH PERMISSION_SET = UNSAFE;
GO
CREATE ASSEMBLY [CLRTest01]
AUTHORIZATION dbo
FROM 'C:\Windows\CLRTest01.dll'
WITH PERMISSION_SET = UNSAFE;
GO
我选择相信默认设置,希望能够在不使用“UNSAFE”权限级别的情况下使用“SAFE”。然而,当我尝试对依赖于System.Net.Http的CLRTest01进行操作时,出现了System.Net.Http未签名或格式错误的问题。
CREATE ASSEMBLY [System.Net.Http]
AUTHORIZATION dbo
FROM 'C:\Windows\System.Net.Http.dll'
WITH PERMISSION_SET = SAFE;
GO
使用v4.0_2.0.0.0__b03f5f7f11d50a3a时出错,因为现有策略将阻止安装程序集'System.Net.Http'的使用。使用v4.0_4.0.0.0__b03f5f7f11d50a3a时出错,因为在安全程序集'System.Net.Http'中的类型'System.Net.Http.HttpContent'具有静态字段'EncodingsWithBom'。安全程序集中静态字段的属性必须在Visual C#中标记为readonly,在Visual Basic中标记为ReadOnly,或在Visual C++和中间语言中标记为initonly。这让我相信我需要一个已签名的'System.Net.Http'版本。
HttpWebRequest
代替?这至少已经是SQL Server的CLR宿主的一部分了。此外,你可能应该从其原始位置添加程序集,而不是直接从GAC中添加。 - Solomon Rutzky