【问题标题】:Custom dlls not found in SQL Server 2016 agent job在 SQL Server 2016 代理作业中找不到自定义 dll
【发布时间】:2019-06-23 19:50:10
【问题描述】:

我在 SQL Server 2016 中有一个 ssis 包,它使用了我在 gac 中添加的自定义 dll。 SSIS 包在 Visual Studio 中运行良好,但是当我在 SQL Server 上部署它时,它找不到 dll frm gac。

谁能帮我把那个自定义 dll 放在哪里?

我在我的任务脚本中添加了异常处理并将日志保存在一个文本文件中,上面写着

System.IO.FileNotFoundException:无法加载文件或程序集 'abc,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一。系统找不到指定的文件。

文件名:'abc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

在 ST_7a052dcdad9e4fe18bb49852****.Job.runTask()
在 ST_7a052dcdad9e4fe18bb49852****.ScriptMain.Main()

警告:程序集绑定日志记录已关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。

注意:程序集绑定失败日志记录会带来一些性能损失。要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。

【问题讨论】:

  • 您是否也将 DLL 部署到了生产服务器上的 GAC?
  • 是的,我使用 gacutil
  • 你试过用 Cmd 列出所有 GAC 文件吗?

标签: sql-server dll ssis sql-server-2016 sql-agent-job


【解决方案1】:

有两种可能的原因:

  1. 32/64 位冲突:确保您运行的模式与 dll 版本相关。尝试在 SQL 作业中以 32 位模式运行包:

  2. 将注册的dll复制到SQL程序集路径:%ProgramFiles%\Microsoft SQL Server\<SQL Version>\SDK\Assemblies,然后注册到GAC。还要确保这是包中引用的路径

解决方法

使用 AssemblyResolve 函数:

【讨论】:

  • 它没有用,所以最后我不得不在任务脚本中调用可执行文件而不是使用 dll。
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多