4

我有一个调用简单 HTTP Web 服务的 CLR 项目。它以 x64 为目标,我只有在完成以下链接中概述的步骤后才能正确序列化它,该链接讨论了使 VS2010 指向正确的目标架构 (x64) 所需的更改——这些更改只需要卸载和更改 . csproj 文件有一些额外的行来引用 sgen.exe 的正确版本:http: //geekswithblogs.net/akraus1/archive/2011/12/10/148002.aspx

现在,我可以通过将“生成序列化程序集”设置为打开来构建这个项目及其 .XmlSerializers.dll。我想这样做是因为我的 CLR 项目将部署在数据库上,并且我不希望它运行时序列化任何对象,因为我的数据库中没有引用这些 DLL,我不想给我的 CLR 项目权限出于安全原因高于EXTERNAL_ACCESS,因为这将用于安全性很重要的生产环境,并且还因为我的数据库不可信。

长话短说,我正在按照以下链接中的指南将我的序列化程序集上传到数据库中,但出现错误: http: //footheory.com/blogs/bennie/archive/2006/12/07/invoking-a -web-service-from-a-sqlclr-stored-procedure.aspx

错误是:为程序集“.XmlSerializers”创建程序集失败,因为程序集是为不受支持的公共语言运行时版本构建的。

有谁知道如何通过强制 sgen.exe 序列化支持 CLR 的程序集版本来纠正此问题?万岁堆栈。

4

2 回答 2

2

SQL Server 2005/2008/2008R2 仅支持 .Net 2.0。您需要更改您的项目以针对它,请参阅如何:以特定的 .NET Framework 版本或配置文件为目标。您不需要为构建目标指定 x64,SQLCLR 程序集应该是通用目标构建的。

也就是说,从 SQLCLR 调用 Web 服务是一个非常非常糟糕的主意。不要这样做。让外部进程处理 HTTP 调用。

于 2012-06-26T13:16:31.657 回答
2

我发现问题实际上不是我使用 .NET 3.5 作为目标,而是我引用了错误版本的 sgen.exe 工具,在这种情况下我需要 x64 版本的 6.0A(转换为 .NET 3.5) 在此路径:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sgen.exe。现在我能够构建正确版本的序列化程序集,上传它,也可以使用它。

于 2012-06-27T19:16:17.820 回答