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

时间:2017-11-01 12:49:30

标签: sql-server dll ssis etl script-task

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

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

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

  1. 在Visual Studio数据工具解决方案中打开文件
  2. 浏览到dll位置
  3. 在脚本任务中添加对dll的引用。
  4. 然后,他们从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"));
       }
    

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

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

1 个答案:

答案 0 :(得分:6)

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

有三种方法可以在部署时使用自定义dll:

  • 将DLL分配给GAC
  • 使用AssemblyResolve函数
  • 将所有Dll复制到sql server DTS Assemblies文件夹(SQL Server 2008的示例:C:\Program Files\Microsoft SQL Server\100\DTS\Binn以及.Net框架程序集文件夹。

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

解决方法

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

旁注:我之前没有尝试过此方法,但我只是想帮助

有用的链接&amp;参考