SQLCLR程序集部署失败,因为程序集验证失败

时间:2016-09-28 08:24:18

标签: c# .net sql-server sqlclr user-defined-types

如果其他人遇到此问题。

  

错误:SQL72014:.Net SqlClient数据提供程序:... CREATE ASSEMBLY   程序集'Assembly.Name'失败,因为程序集'Assembly.Name'   验证失败。检查引用的程序集是否是最新的   和信任(对于external_access或不安全)来执行   数据库。 CLR Verifier错误消息(如果有)将遵循此消息
  [token 0x02000003]类型加载失败。

SQLCLR程序集已成功构建但无法部署。当常规.NET应用程序(在SQL Server之外)访问程序集时,它将提供TypeLoadException

  

无法从程序集中加载“Type.In.Assembly”类型   'Assembly.Name,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = null'因为格式无效。

问题与程序集中的用户定义类型(UDT)有关。

1 个答案:

答案 0 :(得分:2)

罪魁祸首是

  

System.Runtime.InteropServices.StructLayoutAttribute

当我们使用
定义UDT时 [Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)] 并且UDT是一个类(而不是结构),它还需要定义一个 课上[StructLayout(LayoutKind.Sequential)]

问题是我的UDT类是从基类继承的。 StructLayout也必须在基类上定义。