用于SQL Server 2008 R2的C#CLR中的newtonsoft.json解析器-如何部署
本文关键字:何部署 部署 json 2008 Server SQL R2 newtonsoft 中的 C#CLR 用于 | 更新日期: 2023-09-27 18:22:25
我创建了一个使用newtonsoft json parser.
的CLR
我需要部署CLR
。我已经为解析器依赖项创建了一个程序集:
CREATE ASSEMBLY [Newtonsoft.Json] FROM 'C:'share'Release'Newtonsoft.Json.dll' WITH PERMISSION_SET = UNSAFE
上面的语句抛出一个错误:
`Assembly 'Newtonsoft.Json' references assembly 'system.runtime.serialization, version=3.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: 2(failed to retrieve text for this error. Reason: 15105)).` Please load the referenced assembly into the current database and retry your request.
我使用的是parser
的7.xx
版本。我的目标是.NET 3.5
部署CLR
到sql server 2008 r2
的正确程序是什么?
对不起,我在评论中做了一个错误的假设。默认情况下,SQL CLR仅支持GAC中的某些库。
为了使用该库,您还需要显式地添加它。
CREATE ASSEMBLY System_Runtime_Serialization FROM 'C:'Windows'Microsoft.NET'Framework'v3.0'Windows Communication Foundation'System.Runtime.Serialization.dll'
WITH PERMISSION_SET = UNSAFE
GO
如果您使用的是64位SQL Server,请确保使用Framework64而不是Framework。
只是在瓶子里留了一张纸条,因为我刚刚在Sql Server升级/迁移到另一个系统时遇到了这个问题。
较新版本的Sql Server对将程序集加载到数据库的要求要严格得多。
我们有一个使用Newtonsoft.json 7.0.1的程序集,当我用证书签名时,该程序集加载良好。
然后我尝试将Newtonsoft升级到11.0.2。这打开了对System.Runtime.Serialization的依赖关系,如这里所述。
该组件的路径与上面的答案不同:
C:'Windows'Microsoft.NET'assembly'GAC_MSIL'System.Runtime.Serialization'v4.0_4.0.0.0__b77a5c561934e089'System.Runtime.Serialization.dll
然后发现System.Runtime.Serialization依赖于System.ServiceModel.Internals.dll。当我试图将该程序集加载到Sql Server 2019中时,它失败了,错误是用于对该程序集进行签名的证书已过期。
因此,如果您继续使用Newtonsoft.json 7.0.1,那么这里需要解决的依赖项要少得多。或者,根据您需要的功能,也许Utf8Json或其他项目需要加载到SqlServer中的依赖项会更少
编辑:好吧,这可能是17种不同程度的糟糕,但我发现我之前的工作是。。。''packages''Newtonsoft.Json.7.0.1''lib''net20版本的文件。有人把裸体经理短路了,然后把它锁在了那个上加载到Sql Server 2019数据库程序集区域的,而没有引用导致各种问题的System.Runtime.Serialization(或System.ServiceModel.Interior)。
如果我把packages.config中的目标改回2.0,也没关系,它会尝试获取新的框架Newtonsoft dll来匹配其他代码。
只是为了好玩,我尝试升级到Newtonsoft 11.0.2,并强制使用net20 dll,该dll加载到Sql Server 2019中,而无需加载其他.net框架dll。
不确定Newtonsoft的所有构建目标之间可能存在哪些功能差异,但在将net20加载到Sql Server 2019 时,附加的字符串似乎要少得多