gpt4 book ai didi

c# - 在 SQL Server 2005 : The given assembly name or codebase was invalid. 中加载 CRL 程序集(HRESULT 异常:0x80131047)

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:46 26 4
gpt4 key购买 nike

我已经编写了一个 C# DLL,我需要从存储过程中调用它。

我在执行的所有步骤中都遇到了错误,并设法解决了这些错误。但现在我对错误感到厌烦,不得不求助于此并询问。这个我解决不了在将此 .DLL 安装到 SQL Server 中时,我所做的每一小步都会遇到大量错误需要解决。

这是程序的 C# 代码(编译为类库以获取 DLL):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Xml;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

namespace WebServiceVatEuropa
{
public class WebServiceVatEuropaClass
{
#region "Default Constructor"
public WebServiceVatEuropaClass()
{

}
#endregion

[SqlProcedure]
public static void check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
}
}
}

它使用了欧洲增值税检查网络服务 (Link to webservice) 提供的另一个免费库,并使用了他们的库 (Library code)(这段代码又长又复杂,我猜你可以直接阅读我的代码。

嗯。我在 SQL Server Management Studio 中使用以下代码创建了存储过程(我在这里遇到了很多问题,很多错误等等,但现在可以了):

CREATE PROCEDURE VAT_CHECKER
@Naz_codi nvarchar(2),
@vatNum nvarchar(max)
AS EXTERNAL NAME WebServiceVatEuropaClass.[WebServiceVatEuropa.WebServiceVatEuropaClass].[check]
GO

然后在数据库中我有:

  1. 使用来自 msn 的代码启用 clr

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'clr enabled', 1;
    GO
    RECONFIGURE;
    GO
  2. 将数据库所有者更改为 sa

  3. 用这段代码注册程序集

    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'

我收到这个错误:

An error occurred in the Microsoft .NET Framework while trying to load assembly id 65545. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error: System.IO.FileLoadException: Could not load file or assembly 'webservicevateuropa, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

System.IO.FileLoadException:
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.Load(String assemblyString)

它可能是什么?我找不到任何东西来修复它...

最佳答案

错误消息基本上告诉了您所有的信息 - 由于您的程序集正在伸出并访问外部 Web 服务,因此您必须将其配置为 EXTERNAL_ACCESS

你并没有展示你是如何在你的 SQL Server 中创建程序集的——但基本上,你需要使用类似的东西:

CREATE ASSEMBLY assembly_name
FROM ...(your assembly).....
WITH PERMISSION_SET = { EXTERNAL_ACCESS }

你是这样做的吗?如果不是:请使用 EXTERNAL_ACCESS 权限集重试!

参见 MSDN documentation on Code Access Security了解更多详情

关于c# - 在 SQL Server 2005 : The given assembly name or codebase was invalid. 中加载 CRL 程序集(HRESULT 异常:0x80131047),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com