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

2024-01-10

I use 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"));
   }

但我无法找到避免手动浏览和添加 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 引用而不是本地程序集

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

有用的链接和参考

  • 部署期间的 SSIS 自定义 DLL https://social.msdn.microsoft.com/Forums/sqlserver/en-US/25d6cf56-67e2-41cd-8eba-e5c9fc1d5bf2/ssis-custom-dlls-during-deployment?forum=sqlintegrationservices
  • 如何在 GAC 之外的 SSIS 脚本任务中加载程序集 https://blogs.msdn.microsoft.com/dbrowne/2014/06/25/how-to-load-an-assembly-in-a-ssis-script-task-that-isnt-in-the-gac/
  • SQL Server SSIS 自定义 DLL 文件夹 http://thinknook.com/sql-server-ssis-custom-dll-folders-2011-11-17/
  • 在 SSIS 脚本任务中使用自定义 DLL http://blog.joshuawjay.com/2014/08/using-custom-dlls-in-ssis-script-task.html
  • SSIS脚本任务找不到对程序集的引用 https://stackoverflow.com/questions/37681631/ssis-script-task-cant-find-reference-to-assembly
  • 在脚本解决方案中引用其他程序集 https://learn.microsoft.com/en-us/sql/integration-services/extending-packages-scripting/referencing-other-assemblies-in-scripting-solutions
  • 通过SSIS脚本组件访问WebService https://social.msdn.microsoft.com/Forums/sqlserver/en-US/75111c36-3d92-4440-a7b3-5cfe8a648403/access-webservice-via-ssis-script-component?forum=sqlintegrationservices
  • 通过脚本任务调用SSIS中的安全Web服务 https://stackoverflow.com/questions/37292239/calling-a-secure-webservice-in-ssis-through-script-task
  • 通过 SSIS 脚本组件使用 Web 服务 https://social.technet.microsoft.com/wiki/contents/articles/22587.consume-webservice-via-ssis-script-component.aspx
  • 如何:使用 Visual C# .NET 编写简单的 Web 服务 https://support.microsoft.com/en-in/help/308359/how-to-write-a-simple-web-service-by-using-visual-c--net
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 游标与更新

    一家公司使用 SQL Server 数据库来存储有关其客户及其业务交易的信息 您所在的城市引入了新的区号 对于前缀小于 500 的电话号码 区号 111 保持不变 前缀为 500 及以上的号码将分配区号 222 客户表中电话列中的所有电话号
  • SQL Server、ISABOUT、加权项

    我试图弄清楚加权项在 SQL SERVER 的 ISABOUT 查询中是如何工作的 这是我目前所在的位置 每个查询返回以下行 查询 1 权重 1 初始排名 SELECT FROM CONTAINSTABLE documentParts ti
  • PIVOT 运算符中指定的列名“FirstName”与 PIVOT 参数中的现有列名冲突

    当我尝试替换时收到以下错误消息null to zero PIVOT 运算符中指定的列名 jan 与 PIVOT 参数中的现有列名称 查询如下 select from select isnull jan 0 isnull feb 0 sum
  • 动态SQL生成列名?

    我有一个查询 我正在尝试将行值转换为列名称 目前我正在使用SUM Case As ColumnName 声明 像这样 SELECT SKU1 SUM Case When Sku2 157 Then Quantity Else 0 End A
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • SSIS:如何将项目连接管理器移动到包中

    我有一个 2012 SSIS 项目 其中在项目级别定义了许多连接管理器 该项目还包括许多引用这些连接管理器的包 现在我想将我的项目转换为部署模型 但向导指定我需要删除项目中的连接管理器 这意味着将连接管理器移动到包中 如何将项目级连接管理器
  • SSIS - 将参数传递给 ADO .NET 源查询

    我知道早些时候已经有人问过这个问题 大多数答案都不相关 谷歌了一下 显示解决办法是在 数据流任务 中配置表达式并设置查询 然而 在 ADO NET 源中 当我尝试预览输出时 我不断收到 Must declare the variable 它
  • Powershell SQL Server数据库连接和连接超时问题

    我有一个连接到 SQL Server 2012 数据库的 powershell 脚本 该脚本运行 SQL 查询并将结果集放入数据表中 以将格式化的电子邮件发送给相关方 下面是问题所在的代码片段 CBA New Object System D
  • 将存储过程的结果加上额外的列插入表中

    如何在其中插入更多列dbFileListOnly表以及 EXEC 查询 INSERT INTO admindb dbfilelistonly path col1 col2 path EXEC RESTORE FILELISTONLY FRO
  • 使用 Spring Boot 的 Flyway Core 给出错误 'delayedFlywayInitializer' 和 'entityManagerFactory' 之间的循环依赖关系

    我想在 SQL Server 数据库上导入一些数据 我使用的是 Spring Boot 2 3 4 我还使用 Hibernate 来生成表 我在pom中添加了flyway核心
  • 如何将存储过程中的值返回到 EF

    我试图通过 EF 调用存储过程并从存储过程中检索返回值 我用过this https stackoverflow com questions 6861737 executesqlcommand with output parameter an
  • 如何使用 RODBC 将数据帧保存到数据库生成的主键表

    我想使用 R 脚本将数据框输入到数据库中的现有表中 并且希望数据库中的表具有顺序主键 我的问题是 RODBC 似乎不允许主键约束 这是创建我想要的表的 SQL CREATE TABLE dbo results ID INT IDENTITY
  • 数据转换器 SSIS 数据流组件中相应列的转换数据类型应该是什么?

    我们的一台服务器上有普通的 Microsoft SQL Server 2008 我们决定在文件系统上创建 DTSX 文件 以便我们可以使用 BIDS 2008 打开 DTSX 文件 一种 SSIS 控制流组件 它从 Microsoft SQ
  • SQL 查询在多用户环境中返回错误值

    一段时间以来 我们在我们的一个客户站点上发现了奇怪的数据完整性问题 经过大量调查后 我们现在已将其隔离为数据库调用 如果两个用户同时调用同一个存储过程 有时一个用户会得到另一个用户的结果 我们设置了一个测试来验证这一点 并且我们有一个循环
  • 为单个方法引用大 DLL

    我想在 C 中使用大型类库 dll 中的单个方法 是否有性能或其他方面的缺点 我应该使用反射工具 读取 方法代码并将其复制粘贴到我的项目中吗 更新 硬盘空间不是问题 我的应用程序是网络应用程序 是否有性能或其他方面的缺点 唯一真正重要的是可
  • 从 C# 调用非托管 dll。拿2

    我编写了一个 C 程序 它调用一个 C DLL 将命令行参数回显到文件中 当使用 rundll32 命令调用 c 时 它显示命令行参数没有问题 但是当从 c 内部调用它时 它不会显示 我问了这个问题 https stackoverflow
  • SQL 查询Where Column = '' 返回表情符号字符

    好的 我有一个包含三列的表 Id Key Value 我想删除所有行Value是空的 因此 我在删除之前编写了要选择的查询 Select from Imaging ImageTag where Value 到目前为止一切都很标准 现在这是奇
  • 实体框架、dll、excel

    我用C 编写了Excel使用的dll 该dll是COM注册的 我与 Excel 的连接没有问题 该 dll 使用实体框架 5 从 SQL Server 数据库检索数据 如果我通过控制台应用程序运行该 dll 则该 dll 工作正常 但是当我
  • 避免数据集中出现重复名称

    我正在从表中获取数据并绑定到标签并在 gridview 中下拉 但我想从表中过滤重复的名称并将相应的日期分配给 DDL 如何做到这一点 或者还有其他选择吗 private DataSet get string sql select Id N
  • 如何在sql server中对行号进行内连接

    SQL Server 2008 两张表 表A有以下数据 RowA RowB RowC RowD 表B有以下数据 Row4 Row3 Row2 Row1 我想得到以下输出 RowA Row1 RowB Row2 RowC Row3 RowD

随机推荐