首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Server 2012中注册stdole程序集

无法在Server 2012中注册stdole程序集
EN

Stack Overflow用户
提问于 2014-07-17 19:31:20
回答 1查看 1.4K关注 0票数 2

我正在将Server 2008迁移到2012年,在为CLR例程创建一些必要的程序集时遇到了挑战。这个例程依赖于stdole.dll,但是我无法创建这个程序集。我的代码如下:

代码语言:javascript
复制
ALTER DATABASE main SET TRUSTWORTHY ON;

create assembly [stdole]
from
'C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\stdole.dll'
WITH PERMISSION_SET = unsafe

我收到以下错误:

代码语言:javascript
复制
Warning: The Microsoft .NET Framework assembly 'stdole, version=7.0.3300.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details.
Msg 10332, Level 16, State 1, Line 3
Assembly "stdole" was built using version v1.0.3705 of the .NET Framework. SQL Server currently uses version v4.0.30319.

我目前使用一个具有sysadmin权限的帐户登录,因此我拥有UNSAFE ASSEMBLY权限。

请帮帮我!我已经研究了好几个小时了,但是找不到有用的东西。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-21 15:07:07

关键信息在错误中指出的两个不同的.Net版本中:

程序集"stdole“是使用.NET框架的v1.0.3705版本构建的。Server当前使用v4.0.30319版本

Microsoft SQL Server不允许混合模式CLR.也就是说,它是静态地链接到一个特定的系列。Server 2005、2008和2008 R2链接到2.0系列(2.0、3.0和3.5),Server 2012和2014链接到4.0系列(4.0和4.5)。更多细节可以找到这里

因此,从Server 2012开始加载该版本的stdole.dll是不可能的。不幸的是,该文件夹中没有链接到4.0系列框架的其他DLL。

编辑:

尝试以下操作,因为它将生成具有相同publickeytoken (即b03f5f7f11d50a3a)并在Server 2012中成功加载的DLL。其思想是提取基本代码(通过ILDASM),然后将其重新链接到较新的框架(通过ILASM)。我不确定您的代码是否需要重新编译。

  1. 打开"Visual命令提示符“/”开发人员命令提示符“(不是常规的”命令提示符“)。
  2. 运行以下语句: MKDIR C:\TEMP\stdole CD C:\TEMP\stdole XCOPY /V "C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\stdole.dll" . ILDASM stdole.dll /out:stdole.il ILASM /DLL /OPTIMIZE /OUTPUT=stdole-4.0.dll /RESOURCE=stdole.res stdole.il
  3. 在SSMS中运行以下命令: USE [main]; CREATE ASSEMBLY [stdole] FROM 'C:\TEMP\stdole\stdole-4.0.dll' WITH PERMISSION_SET = UNSAFE;

备注:

  • 什么是stdole.dllhttp://msdn.microsoft.com/en-us/library/aa195478(office.11).aspx
  • stdole.res文件是ILASM命令的一个参数,它是由ILDASM命令创建的;它只是没有像stdole.il那样被显式地声明为输出文件。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24811961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档