关于sql server:FileLoadException / Msg 10314运行CLR存储过程时出错

关于sql server:FileLoadException / Msg 10314运行CLR存储过程时出错

FileLoadException / Msg 10314 Error Running CLR Stored Procedure

尝试运行CLR存储的proc时收到以下错误。 任何帮助深表感谢。

1
2
3
4
5
6
7
8
9
Msg 10314, Level 16, State 11, Line 1
An error occurred in the Microsoft .NET Framework while trying to load assembly id 65752. 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 'orders, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An error relating to security occurred. (Exception from HRESULT: 0x8013150A)
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.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)

运行以下SQL命令,该问题似乎已解决。

1
2
3
4
5
USE database_name
GO

EXEC sp_changedbowner 'sa'
ALTER DATABASE database_name SET TRUSTWORTHY ON

使用任何CPU配置来构建项目。 当使用x86配置编译我自己的项目并尝试在x64 SQL Server上运行它时,我遇到了这个问题。


应用了以上所有建议,但失败了。
然后,我使用" Any CPU"选项重新编译了源代码,并且成功了!

该链接帮助:
SQL Server无法使用PERMISSION加载程序集


1
2
3
ALTER AUTHORIZATION ON DATABASE::mydb TO sa;
ALTER DATABASE [myDB] SET TRUSTWORTHY ON
GO

您的程序集是否执行文件I / O? 如果是这样,则必须授予程序集权限才能执行此操作。 在SSMS中:

  • 展开"数据库"
  • 展开数据库的节点
  • 展开"可编程性"
  • 展开"程序集"
  • 右键单击您的装配,选择属性
  • 在"常规"页面上,将"权限集"更改为"外部访问"

  • 推荐阅读