【问题标题】:Using .Net 3.5 assemblies SQL 2005 CLR?使用 .Net 3.5 程序集 SQL 2005 CLR?
【发布时间】:2010-11-14 10:26:13
【问题描述】:

我有一个 CLR 存储过程,它引用在 VS 2008 中创建的使用 Linq 的程序集。让我们将此程序集称为“MyLib”。

我似乎无法将“MyLib”放入我的 SQL 2005 数据库。我执行以下操作:

CREATE ASSEMBLY [MyLib]
    FROM 'C:\MyLib\bin\Release\MyLib.dll'
WITH PERMISSION_SET = UNSAFE
GO

但我得到了错误:

Assembly 'MyLib' references assembly 'system.core, version=3.5.0.0, 
culture=neutral, publickeytoken=b77a5c561934e089.', which is not present 
in the current database. SQL Server attempted to locate and automatically 
load the referenced assembly from the same location where referring assembly 
came from, but that operation has failed (reason: 2(error not found)). Please
load the referenced assembly into the current database and retry your request.

除了我为每个程序编写一个“CREATE ASSEMBLY”命令之外,还有一种更简单的方法可以将所有 .Net 3.5 程序集放入 SQL 2005 CLR 中吗?是否有一些“最佳实践”方式来做到这一点?

【问题讨论】:

  • 你会认为有人不厌其烦地为他们中的许多人制作了一个大的 T-SQL 脚本并将其发布在网上......但我找不到一个:(
  • 来自文档:SQL Server 还在同一位置查找此程序集的任何依赖程序集并上传它们。

标签: .net sql-server clr sqlclr


【解决方案1】:

SQL Server 2005 附带 v2.0.50727 CLR - 还包括 LINQ。

您将无法在 SQL 2005 CLR 程序集中使用 LINQ - 您需要坚持使用原始的 .NET 2.0 程序集。

唯一的机会是在您的部署中包含所有相关的 3.5 系统程序集(即 System.Linq、System.Data.Linq) - 它们都基于 .NET 2.0 CLR,因此可能是可能 - 我个人可能不会费心去尝试,看起来工作量太大,也太麻烦了。

SQL Server 2008 R2 很可能会附带一个新的 CLR(只是我的猜测 - 目前还没有官方确认或公告,AFAIK)。

马克

【讨论】:

  • 这个项目是我刚刚接手的项目,之前的编码员开始将 Linq 添加到所有内容中,但从未尝试在 SQL 2005 中重新注册程序集。如果你是对的,那么我有LOT 的工作正朝着我的方向前进。我暗暗希望你是错的(这样我就不必做大量的工作),但我对此并不抱太大希望。
  • 如果您查看 Thorarin 帖子中链接中的主题,我怀疑您会很幸运:-(
【解决方案2】:

查看this thread。基本上,您必须手动获取要加载的新程序集,而不是从全局程序集缓存中自动加载它们。

(2.0和3.5版本的CLR是一样的)

【讨论】:

  • 忘记发布使其工作的代码:CREATE ASSEMBLY [System.Core] FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' WITH PERMISSION_SET = UNSAFE GO 完成后,“MyLib”程序集完美运行。
  • 也忘记了:ALTER [database] SET TRUSTWORTHY ON
猜你喜欢
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
相关资源
最近更新 更多