【发布时间】:2017-03-29 16:30:45
【问题描述】:
我在运行使用 MSSSQL 中的程序集的函数时收到以下错误:
消息 10314,级别 16,状态 11,行 36 尝试加载程序集 id 65800 时,Microsoft .NET Framework 发生错误。服务器可能资源不足,或者程序集可能不受 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE 的信任。再次运行查询,或查看文档以了解如何解决程序集信任问题。有关此错误的更多信息: System.IO.FileLoadException:无法加载文件或程序集“exporttoexcel,版本=0.76.0.0,文化=中性,PublicKeyToken=f73371c9a1809a3f”或其依赖项之一。 HRESULT 异常:0x80FC80F1 System.IO.FileLoadException: 在 System.Reflection.Assembly._nLoad(AssemblyName 文件名,字符串代码库,证据 assemblySecurity,程序集 locationHint,StackCrawlMark 和 stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection) 在 System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,证据 assemblySecurity,StackCrawlMark & stackMark,Boolean for Introspection) 在 System.Reflection.Assembly.InternalLoad(字符串 assemblyString,证据 assemblySecurity,StackCrawlMark 和 stackMark,Boolean for Introspection) 在 System.Reflection.Assembly.Load(String assemblyString)
但是在我重新创建函数和程序集之后,一段时间内一切正常:
DROP FUNCTION [dbo].[fnExportToExcel]
DROP ASSEMBLY ExcelExporter
CREATE ASSEMBLY ExcelExporter
AUTHORIZATION [DOMAIN\ACCOUNT]
FROM 'ExportToExcel.dll'
WITH PERMISSION_SET = UNSAFE
CREATE FUNCTION [dbo].[fnExportToExcel](@Query [nvarchar](max), @FilePath [nvarchar](max), @FileName [nvarchar](max), @SheetNames [nvarchar](max))
RETURNS [nvarchar](max) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME ExcelExporter.[ExportToExcel_DLL.cls_ExcelExport].[ExportToExcel]
GO
任何想法可能导致 MSSQL 丢失程序集引用?
【问题讨论】:
-
您是跨数据库调用程序集还是仅从它所在的数据库调用程序集?
-
我在跨数据库调用它。
-
@AlexK。谢谢。似乎这就是问题所在。问题是我必须使用 EXEC sp_changedbowner 'sa' 将所有者更改为 sa 才能使其工作。我想知道为什么?
-
不确定,可能是因为 sa sid 由服务器维护为一个固定值,所以总是“正确”的。为什么不发布您应用的修复作为答案。