0

我正在为 SQL Server 2008 创建一个 CLR 程序集,它只支持 .NET 2.0 程序集。此外,SQL Server 还要求您要注册的每个程序集都有一个强名称键。

我尝试创建的程序集引用了 .NET 2.0 版本的 json.net ( https://json.codeplex.com/ )。但是,我的项目无法生成 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,我很想知道。谢谢!

4

1 回答 1

3

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

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

我怀疑你链接的博客中的这个建议会让你误入歧途

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

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

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

C:\Windows\Microsoft.NET\Framework\v2.0.50727

并且

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

(和别的)

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

于 2014-10-20T21:34:59.690 回答