2014-10-20 37 views
0

我正在为SQL Server 2008创建一个CLR程序集,该程序集仅支持.NET 2.0程序集。此外,SQL Server还需要一个强名称密钥,每个程序集要注册。签署一个未签名的程序集并使用ilasm.exe针对.NET 2.0

我试图创建参考json.net的.NET 2.0版(https://json.codeplex.com/)的程序集。但是,我的项目无法生成SNK文件,因为Newtonsoft.Json.dll本身是未签名的。 (至少,当我尝试建立我的项目并签名,我得到的错误。)

我得到解决此使用此处介绍的技巧:不过 http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/

,重组Newtonsoft.Json.dll时与我的项目的SNK一样,它必须生成一个高于.NET 2.0的目标框架的DLL。我知道这是因为我得到SQL Server中的以下错误:

CREATE ASSEMBLY for assembly 'Newtonsoft.Json' failed because the assembly is built for an unsupported version of the Common Language Runtime. 

有谁知道如何使ilasm.exe生成目标框架.NET 2.0的组件?或者我可能完全错误地解决了这个问题 - 如果在2008年CLR程序集中使用Newtonsoft.Json更好的解决方案,我很想知道。谢谢!

+0

在SQL Server中使用的程序集中真的需要* json *吗?如果你没有真正使用它,只需删除参考。 – acfrancis 2014-10-20 21:35:14

+0

@acfrancis - 我完全同意这种功能不应该在CLR中。但是,考虑到我的项目的限制,我需要能够通过SQL存储过程来解释json。我知道这很丑陋,但它需要完成。除了使用Newtonsoft.Json之外,你知道更简单的方法吗?再次,我需要的唯一功能是能够将JSON文档解码为C#中的对象。 – cody 2014-10-20 21:59:11

回答

3

请确保您从正确的目录运行ilasm。 .NET Framework的每个版本的工具都位于不同的目录中。

如果您使用PATH中的一个,则可以在提示符下输入where ilasm以查找找到的版本。

我怀疑你从链接的博客这个建议是导致你引入歧途

我们需要打开它在PATH环境变量中的.NET框架二进制命令提示符。最简单的方法是打开Visual Studio命令提示符(通常位于程序菜单中的“Visual Studio 20XX”的“Visual Studio Tools”子文件夹下)。

没有提及版本,或者.NET Framework运行时安装了比Visual Studio安装的更多版本的工具。

例如,我的系统上我有ILASM在

C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

(和其他)

运行v4之一,这是我从“Visual Studio 2013 x64本地工具命令提示符”中获得的将创建一个.NET 4兼容的程序集,运行v2创建一个.NET 2兼容的程序集。

+0

这工作 - 我使用了2.0版本的ilasm,并没有问题。但是,我发现Newtonsoft.Json有各种各样的静态字段,所以我不能注册它,除非我设置external_access = unsafe(我不能这么做)。 – cody 2014-10-20 21:56:51

+0

虽然我们在这里,你知道任何轻量级,简单的库,将解码一个JSON文档到一个对象吗?这是我寻找的唯一功能,这是我的CLR所必需的。 – cody 2014-10-20 21:57:16

+0

@环境:对不起,我不使用JSON非常多,所以我不知道.NET或SQL服务器有什么选项。 – 2014-10-20 22:25:00

相关问题