gpt4 book ai didi

sql-server - 在生产环境中部署包时,如何避免在脚本任务的“添加引用”中手动浏览DLL?

转载 作者:行者123 更新时间:2023-12-02 19:20:42 24 4
gpt4 key购买 nike

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

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

现在每次我都必须要求 DBA 团队与我共享生产服务器屏幕,我:

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

然后,他们从计划作业引用的位置导入 MSDB 中的包文件并执行该包。

如果我不执行上述步骤,脚本任务将抛出未找到引用的错误。

Error 1 The type or namespace name 'OfficeOpenXml' could not be found (are you missing a using directive or an assembly reference?)

我通过动态加载程序集克服了在 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 的服务器上部署包文件的正确/最佳实践方法是什么。

最佳答案

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

在部署时使用自定义 dll 有 3 种方法:

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

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

解决方法

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

旁注:我以前没有尝试过这种方法,但我只是想提供帮助

有用的链接和引用

关于sql-server - 在生产环境中部署包时,如何避免在脚本任务的“添加引用”中手动浏览DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47055268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com