序列化程序集不会上传到数据库

时间:2012-06-26 12:38:49

标签: sql sql-server serialization clr sqlclr

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

现在,我可以通过将“Generate serialized assembly”设置为on来构建此项目及其.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”的CREATE ASSEMBLY失败,因为程序集是为不支持的公共语言运行时版本构建的。

是否有人知道如何通过强制sgen.exe序列化CLR支持的程序集版本来解决这个问题? Viva the Stack。

2 个答案:

答案 0 :(得分:2)

SQL Server 2005/2008 / 2008R2仅支持.Net 2.0。您需要更改项目以将其定位,请参阅How to: Target a Specific .NET Framework Version or Profile。你需要为构建目标指定x64,SQLCLR程序集应该是构建的Common目标。

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

答案 1 :(得分:2)

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