1

我们有一个安装在中央服务器上并从多个位置调用的 SSIS 2005 包。这个包使用脚本任务来调用我用 c# 编写并安装到中央服务器上的 GAC 中的 .NET DLL。当我从安装包的服务器调用 SSIS 包时,一切都很好。

当我使用 SQL Server 代理从远程服务器调用包时,作业失败,报告找不到 DLL。

只是为了测试发生了什么,我在远程服务器上安装了 dll,并且包成功了。所以看起来虽然包安装在一台机器上,但当它使用 SQL Server 代理从另一台机器上调用它时,它实际上是在调用机器上执行的,它是调用机器必须满足所有依赖关系。

这个包将从几十个服务器上调用,其中许多我无法控制。

有没有一种方法可以让我安装、配置、编译、调用或以其他方式对这个包的构建或执行方式做一些事情,以便它从安装包的机器上的 GAC 调用 DLL?

4

1 回答 1

1

不幸的是,您将需要更改您的设计,因为 SSIS 包存储就是这样 - 存储。执行总是发生在调用包的机器上,并且所有引用都被视为相对于该机器。

一种选择是向 SSIS 包添加一个任务,该任务在调用机器的 GAC 中复制和注册 DLL - 但如果您无法控制某些正在执行的机器,则无法保证正在执行的 SQL 代理帐户将拥有注册 DLL 的足够权限。

另一种解决方案是将 DLL 代码转换为 SSIS 包内的脚本任务。这意味着将代码从 C# 转换为 VB,并且根据您的代码的细节可能并不简单。

如果没有关于包用途和 DLL 功能的更多详细信息,很难评估其他替代方案,但您可以考虑是否可以对包进行参数化以使其始终能够从存储服务器运行。

于 2009-09-10T07:15:09.067 回答