在生产中部署包时,如何避免在"添加脚本任务参考"中手动浏览DLL?

Mud*_*san 6 sql-server dll ssis etl script-task

我使用EPPlus.dll库动态生成Excel文件以进行附件,并在SSIS包的脚本任务中生成邮件程序.

当邮件程序中有新的更改要求时,我在本地计算机上执行脚本任务更改,并将构建的包文件(.dtsx)发送给DBA团队进行部署.

现在每次我都要请DBA团队与我共享生产服务器屏幕,我在哪里:

  1. 在Visual Studio Data Tools解决方案中打开该文件
  2. 浏览到DLL位置
  3. 在脚本任务中添加对dll的引用.

然后,他们从MSDB中导入包文件,从那里调度作业引用并执行包.

如果我不执行上述步骤,则脚本任务会引发未找到引用的错误.

错误1找不到类型或命名空间名称'OfficeOpenXml'(您是否缺少using指令或程序集引用?)

我克服了在脚本任务中引用的GAC中安装DLL的挑战,方法是动态加载程序集,如下所示'

public void Main()
{
     AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

}
  private System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
  {
            return System.Reflection.Assembly.LoadFrom(System.IO.Path.Combine(strDLLPath, "EPPlus.dll"));
   }
Run Code Online (Sandbox Code Playgroud)

但我,无法找到避免手动浏览和添加DLL引用的步骤.请帮助,因为DBA团队不愿意/避免共享屏幕.

或者,如果我没有直接访问生产服务器,那么在使用外部dll的服务器上部署包文件的正确/最佳实践方法是什么.

Had*_*adi 6

我认为从集成服务包中没有直接的方法可以做到这一点,因为您可以做到的唯一解决方法是 - (使用CurrentDomain_AssemblyResolve函数完成的工作) - 从某个位置加载程序集而不是将其安装到GAC中.

在部署中有三种使用自定义dll的方法:

  • 将DLL分配给GAC
  • 使用AssemblyResolve功能
  • 复制所有的DLL到SQL Server DTS组件文件夹(例如对于SQL Server 2008: C:\Program Files\Microsoft SQL Server\100\DTS\Binn)和.NET框架组件文件夹.

如果问题是要求屏幕共享,您可以创建一个小型安装向导,将这些dll复制到特定位置,并要求dba团队执行它.

解决方法

在搜索此问题时,我通过使用Web服务而不是直接dll找到了一个有趣的解决方法,因此您可以创建包含您正在使用的方法的Web服务并添加Web引用而不是本地程序集

旁注:我之前没有尝试过这种方法,但我只是想帮忙

有用的链接和参考