使用ilasm.exe签署未签名的程序集并以.NET 2.0为目标

时间:2014-10-20 21:28:39

标签: .net json .net-assembly assembly-signing ilasm

我正在为SQL Server 2008创建一个CLR程序集,它只支持.NET 2.0程序集。此外,SQL Server还需要一个强名称密钥以及要注册的每个程序集。

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

我使用此处描述的技巧解决了这个问题: http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/

但是,当使用我的项目的SNK重新组装Newtonsoft.Json.dll时,它必须生成目标框架高于.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有更好的解决方案,我很想知道。谢谢!

1 个答案:

答案 0 :(得分:3)

确保从右侧目录运行ilasm。每个版本的.NET Framework都将其工具放在不同的目录中。

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

我怀疑你所链接的博客提出的这条建议让你误入歧途

  

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

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

例如,在我的系统上,我有ilasm in

  

C:\的Windows \ Microsoft.NET \框架\ V2.0.50727

以及

  

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

(和其他人)

运行v4,这是我得到的" Visual Studio 2013 x64 Native Tools命令提示符"将创建一个与.NET 4兼容的程序集,运行v2将创建一个与.NET 2兼容的程序集。