JIb*_*568 5 .net sql-server gac sqlclr sql-server-2012
我在C#中构建了一个SQLCLR函数,该函数将反序列化JSON并返回一个表。
我遇到的问题是在SQL Server 2012中获取正确的程序集。
为了利用Newtonsoft的反序列化器,我不得不向SQL Server添加以下程序集:
System.ServiceModel.Internals.dll
SMDiagnostics.dll
System.Runtime.Serialization.dll
Newtonsoft.Json.dll
Run Code Online (Sandbox Code Playgroud)
这一切都按计划进行,但是当我尝试运行函数时,出现以下错误:
System.IO.FileLoadException:无法加载文件或程序集“ System.Runtime.Serialization,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089”或其依赖项之一。主机存储区中的程序集与GAC中的程序集具有不同的签名。(来自HRESULT的异常:0x80131050)有关更多信息,请参见Microsoft知识库文章949080。---> System.IO.FileLoadException:无法加载文件或程序集'System.Runtime.Serialization,版本= 3.0.0.0,区域性=中性,PublicKeyToken = b77a5c561934e089'或其依赖项之一。主机存储区中的程序集与GAC中的程序集具有不同的签名。(来自HRESULT的异常:0x80131050)有关更多信息,请参见Microsoft知识库文章949080。
服务器已安装.NET 4,而我尝试添加的DLL是从该服务器中获取的。但是,C:\ Windows \ assembly中显示的DLL是版本3.0.0。
我使用Powershell更新了GAC中的DLL,但这仅更新了位于C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL中的DLL。
我到底如何在C:\ Windows \ assembly(我假设这是SQL Server与之进行比较的地方)处获得GAC以反映正确的程序集?
任何帮助是极大的赞赏。
在SQL中运行此脚本,这应该可以解决问题
从'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ System.Runtime.Serialization.dll'更改[System.Runtime.Serialization]
终于设法让这个工作了。不确定这个答案对其他人有多大帮助,但我不得不使用一些来自不同来源的 dll 的组合。
基本上,我从本地计算机获取所有 dll,并将它们复制到服务器,然后尝试对本地文件和 .Net 框架内的文件进行引用组合。
最后,我不得不从服务器上的 .Net 引用 1 个 dll,其余的则从我的本地计算机复制。
这让它工作起来,然后在转移到生产服务器时也工作起来。这不是最简单的解决方案,但我可以建议处于类似情况的任何人只是尝试使用各种参考组合。