C# 正在SQL Server 2005中加载CRL程序集:给定的程序集名称或代码库无效。(来自HRESULT的异常:0x80131047)
我已经编写了一个C#DLL,需要从存储过程调用它 在我所做的所有步骤中,我都遇到了错误,并设法解决了它们。但现在我已经厌倦了错误,我不得不求助于这里并提出要求。我解决不了这个问题。在将这个.DLL安装到SQL Server中时,我每迈出一小步,就要解决大量的错误 以下是程序的C代码(编译为类库以获取DLL): 它正在使用欧洲增值税检查Web服务()提供的另一个免费库,并使用它们的库()(我想这段代码既长又复杂,您可以阅读我的代码 好的。我在SQL Server Management Studio中使用以下代码创建了存储过程(我在这里遇到了许多问题、许多错误等,但现在它可以正常工作):C# 正在SQL Server 2005中加载CRL程序集:给定的程序集名称或代码库无效。(来自HRESULT的异常:0x80131047),c#,sql,sql-server-2005,clr,.net-assembly,C#,Sql,Sql Server 2005,Clr,.net Assembly,我已经编写了一个C#DLL,需要从存储过程调用它 在我所做的所有步骤中,我都遇到了错误,并设法解决了它们。但现在我已经厌倦了错误,我不得不求助于这里并提出要求。我解决不了这个问题。在将这个.DLL安装到SQL Server中时,我每迈出一小步,就要解决大量的错误 以下是程序的C代码(编译为类库以获取DLL): 它正在使用欧洲增值税检查Web服务()提供的另一个免费库,并使用它们的库()(我想这段代码既长又复杂,您可以阅读我的代码 好的。我在SQL Server Management Studio
CREATE PROCEDURE VAT_CHECKER
@Naz_codi nvarchar(2),
@vatNum nvarchar(max)
AS EXTERNAL NAME WebServiceVatEuropaClass.[WebServiceVatEuropa.WebServiceVatEuropaClass].[check]
GO
然后在db中,我有:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
CREATE ASSEMBLY [WebServiceVatEuropaClass] --AUTHORIZATION [mydb\administrator]
FROM 'C:\Upload\WebServiceVatEuropa.dll'
--WITH PERMISSION_SET = SAFE
WITH PERMISSION_SET = UNSAFE
--WITH PERMISSION_SET = EXTERNAL_ACCESS
EXEC VAT_CHECKER 'IT','10050721009'
我得到这个错误:
Microsoft.NET Framework在尝试加载程序集id 65545时出错。服务器可能资源不足,或者
该程序集的权限\u SET=EXTERNAL\u ACCESS可能不受信任
或不安全。请再次运行查询,或查看文档以了解如何
解决程序集信任问题。有关此问题的详细信息,请参阅
错误:System.IO.FileLoadException:无法加载文件或程序集
'webservicevateuropa,版本=0.0.0.0,区域性=中性,
PublicKeyToken=null'或其依赖项之一。给定的程序集
名称或代码基无效。(来自HRESULT的异常:0x80131047)
System.IO.FileLoadException:在System.Reflection.Assembly.\u nLoad(AssemblyName文件名,字符串 代码库、证据汇编安全性、汇编位置提示、, stackcrawmark&stackMark,布尔throwOnFileNotFound,布尔值 用于自省)
在System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, 证据集合安全性,堆栈爬网标记和堆栈标记,布尔值 用于自省)
在System.Reflection.Assembly.InternalLoad(字符串assemblyString、证据assemblySecurity、StackScrawMark和stackMark,布尔值用于内省)
在System.Reflection.Assembly.Load处(字符串assemblyString)
它可能是什么?我找不到任何东西来修复它…错误消息基本上告诉了您所有的信息-因为您的程序集正在访问外部web服务,所以您必须将其配置为
外部访问
您不只是展示如何在SQL Server中创建程序集,而是基本上需要使用以下内容:
CREATE ASSEMBLY assembly_name
FROM ...(your assembly).....
WITH PERMISSION_SET = { EXTERNAL_ACCESS }
您是这样做的吗?如果不是:请使用EXTERNAL\u ACCESS
权限集重试
有关更多详细信息,请参见,因此,我终于设法解决了这个问题(我简直不敢相信) 以下是我所做的: -代码基本上与上面的相同 -我试图在远程桌面计算机上的SQL server 2005上部署dll,但我使用Visual Studio 2010在本地编译它。这可能是个问题,也可能不是。但我切换到了安装在远程桌面计算机上的Visual Studio 2008副本。我在一些网站上看到,Visual Studio中的不同目标体系结构编译设置al Studio可以产生类似于我的问题 -正如我所说的,在将此程序集部署到SQL Server实例的任务中,我每执行一步都会遇到一个错误。这次也一样。在远程桌面计算机上编译后,它又出现了一个关于XmlSerialization的错误 注意:我需要XmlSerializer的具体原因是因为我使用的Web服务使用Xml和C#Xml对象来操作数据,因此程序中涉及Xml。我不知道在其他情况下是否需要XmlSerializer,但在这种特殊情况下,我需要XmlSerializer否则SQL server会给我公开的错误 此处解释了此特定问题的解决方案: 我通过改变编译设置来生成这个额外的dll来解决这个问题,如本文所示 -这就结束了我在VisualStudio中必须做的事情 现在开始SQL部分:
- 我必须为自己的DLL和XmlSerialization创建一个程序集
CREATE ASSEMBLY [WebServiceVatEuropaClass] --AUTHORIZATION [mydb\administrator] FROM 'C:\Upload\WebServiceVatEuropa.dll' --WITH PERMISSION_SET = SAFE WITH PERMISSION_SET = UNSAFE --WITH PERMISSION_SET = EXTERNAL_ACCESS CREATE ASSEMBLY [WebServiceVatEuropaClassXmlSerializers] --AUTHORIZATION [mydb\administrator] FROM 'C:\Upload\WebServiceVatEuropa.XmlSerializers.dll' --WITH PERMISSION_SET = SAFE WITH PERMISSION_SET = UNSAFE --WITH PERMISSION_SET = EXTERNAL_ACCESS
希望这对其他有同样问题的人有用。添加了我用来创建clr的内容(实际上我没有创建它,所有sql作业都由DBA完成)。它似乎已经设置为外部访问。当我第一次在Sql 2005中记录我自己关于添加CLR程序集的内容时,我已经阅读了大量与msdn相关的文章。因此,我所做的基本上是遵循这些指南。DBA告诉我,可能不安全的级别甚至比外部访问更高,因此,将其设置为不安全应该包括你知道这个特别的问题吗?同时我读了msdn的文章我把它创建为不安全的。引用msdn:UNSAFE-UNSAFE允许程序集不受限制地访问SQL Server内外的资源。代码执行
CREATE ASSEMBLY [WebServiceVatEuropaClass] --AUTHORIZATION [mydb\administrator]
FROM 'C:\Upload\WebServiceVatEuropa.dll'
--WITH PERMISSION_SET = SAFE
WITH PERMISSION_SET = UNSAFE
--WITH PERMISSION_SET = EXTERNAL_ACCESS
CREATE ASSEMBLY [WebServiceVatEuropaClassXmlSerializers] --AUTHORIZATION [mydb\administrator]
FROM 'C:\Upload\WebServiceVatEuropa.XmlSerializers.dll'
--WITH PERMISSION_SET = SAFE
WITH PERMISSION_SET = UNSAFE
--WITH PERMISSION_SET = EXTERNAL_ACCESS