发布64位SQL CLR存储过程出错

Tiger_Zhao 2013-05-17 02:22:38
操作系统: Windows Server 2008 R2 (64-bit)
数据库: Microsoft SQL Server Developer Edition (64-bit)
开发工具: Microsoft Visual Studio 2010
创建了 SQL CLR 的 VB.Net 项目,创建了空白的存储过程,编译成功,自动发布失败。
自己用SQL语句手工发布,语句
CREATE ASSEMBLY [abc]
AUTHORIZATION [dbo]
FROM 'C:\...\abc.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;

出错信息(翻译)为:
因为它内置的组件不支持公共语言运行库的版本,CREATE ASSEMBLY组件'abc'失败。

用 "Any PC" 和 "x64" 两种方式编译的 dll 都发布失败。
如何解决?
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2013-05-17
  • 打赏
  • 举报
回复
我也找到这个框架版本的问题 http://bbs.itzcn.com/thread-19753-1-1.html 6257错误过了。 继续下面的问题
KevinLiu 2013-05-17
  • 打赏
  • 举报
回复
另外说一下SQL SERVER 2008 R2是不支持.NET 4.0的assembly ,所以你发布的时候.NET版本要选择3.5或者之前的。
KevinLiu 2013-05-17
  • 打赏
  • 举报
回复
看到2008有个BUG会因为CLR报6257错误: http://esupport.lenovo.com/mss/mss.pl?doctype=kb&docid=MjI4NTA2OA== 但是你的是2008 R2,不一样。
Tiger_Zhao 2013-05-17
  • 打赏
  • 举报
回复
用的是 sa 用户,自我授权不可(应该不需要授权)。 SET TRUSTWORTHY ON 成功。 错误依旧。 然后我在 SQL Server Management Studio 中手工添加程序集,一样的错误,不过可以看到错误号为 6257。 64位系统下的64位 SQL Server,SQL CLR 应该也是64位的吧?
daiyueqiang2045 2013-05-17
  • 打赏
  • 举报
回复
如果是存在提示没有权限的话。 在创建程序集前,执行以下语句: GRANT EXTERNAL ACCESS ASSEMBLY TO loginame ALTER DATABASE dbname SET TRUSTWORTHY ON (dbname 为准备创建的程序集所在的数据库,loginame 为该数据库的拥有者) 查询拥有者用户名 select suser_sname(owner_sid) from sys.databases where [name]='dbname'
Tiger_Zhao 2013-05-17
  • 打赏
  • 举报
回复
引用 1 楼 daiyueqiang 的回复:
对于 SAFE 和 EXTERNAL_ACCESS 程序集,对使用某些 HostProtectionAttribute 注释的 .NET Framework API 的任何调用尝试都将失败 lz你使用HostProtectionAttribute 注释了吗?
不是工程或解决方案的属性吧? 搜了一下代码,没有用到。
Tiger_Zhao 2013-05-17
  • 打赏
  • 举报
回复
daiyueqiang2045 2013-05-17
  • 打赏
  • 举报
回复
对于 SAFE 和 EXTERNAL_ACCESS 程序集,对使用某些 HostProtectionAttribute 注释的 .NET Framework API 的任何调用尝试都将失败 lz你使用HostProtectionAttribute 注释了吗?

34,597

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧