在生产环境中部署包时,如何避免在脚本任务的“添加引用”中手动浏览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 表

    我在 SQL Server 2008 R2 中有一个大表 它包含数十亿行 我需要在我们的应用程序中加载整个数据集 查询全表非常慢 我想使用 bcp 将其转储到文件中并加载它 但问题是字符串列包含各种特殊字符 如 t 0 逗号和 n 我找不到
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 如何在 SQL Server 存储过程中对用户定义的表类型执行 ForEach?

    XX PROCEDURE dbo XXX X dbo IntType readonly AS BEGIN SET NOCOUNT ON how can I foreach X here and do process individually
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • SQL Server 列名区分大小写

    我使用的数据库具有 French CI AS 排序规则 CI 应该代表不区分大小写 但无论如何都是区分大小写的 我试图理解为什么 我断言这一点的原因是 使用 GIVEN 案例设置进行批量插入失败 但使用另一个 Given 案例设置则成功 例
  • 如何获得顶部带有千位分隔符的数字?

    SELECT count FROM table A 假设结果是8689 我怎样才能将它转换为8 689在 SQL Server 上 尝试这样 select replace convert varchar convert Money coun
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 加载 DLL 及其依赖项

    如何加载 dll 及其依赖项 我不想将每个依赖的 dll 都放在 Assembly Load 中 我宁愿只加载一个 dll 然后加载依赖项 当我的应用程序启动时 上面的 dll 不会被加载 它们仅在用户执行特定操作时加载 然后冻结 gui
  • 普通表还是全局临时表?

    我和另一位开发人员正在讨论哪种类型的表更适合我们的任务 它基本上是一个我们将在一天结束时截断的缓存 就我个人而言 我认为没有任何理由为此使用除普通表之外的任何内容 但他想使用全局临时表 其中之一有什么优点吗 使用普通表tempdb如果这只是
  • 优化 SQL Server 上的删除

    Deletesql server 上的有时很慢 我经常需要优化它们以减少所需的时间 我一直在谷歌上搜索一些关于如何做到这一点的提示 并且我发现了各种各样的建议 我想知道你最喜欢和最有效的驯服删除野兽的技术 以及它们如何以及为什么起作用 到目
  • 在 C# 中读取大型 SQL 脚本文件

    我正在尝试阅读一个大脚本 到目前为止我已经尝试了两种选择 选项1 由于内存空间不足的问题 我们无法在SQL Management Studio中打开大型脚本文件 所以最初我使用sqlcmd在远程主机上执行 160 mb SQL 脚本文件 5
  • 无法使用 Tedious 和 Node JS 连接到本地 SQL Server 数据库

    我正在尝试连接到本地计算机上的 SQL Server 我正在尝试使用乏味和乏味 ntlm 两者的配置如下 var tds require tedious ntlm var tds require tedious var config use
  • SQL 2008全文索引填充延迟

    我的经理说 在基础表数据更改后 可能需要一段时间才能更新全文搜索索引 例如 如果我有一张桌子Products有一个柱子Description我更新了该描述 然后我可能需要一些时间才能搜索该新描述 真的吗 这需要多长时间 SQL 2008 对
  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L
  • 如何将 数组传递给存储过程

    我有一个清单索赔数据在 C 中 它有三个项目 日期 类型和描述 其中可以有多行 如下所示 索赔数据 Date Type Description 01 02 2012 Medical Its a medical 05 02 2013 Thef
  • 意外的查询结果

    为什么我从 sql server 得到以下结果 SELECT 12 C1 CONVERT int C2 CASE WHEN THEN equal ELSE not equal END C3 Sql Server Fiddle 演示 http
  • Reporting Services 在哪里存储其日志文件

    最相关的谷歌结果似乎表明 为了访问日志 我们必须将您自己的日志表部署到数据库并制作报告服务写入它 http technet microsoft com en us library ms157403 aspx 简而言之 Reporting S
  • SQL返回两行之间的秒差

    这个问题与SQL Server有关 我有下表 id size batch code product code additiontime 1 91 55555 BigD Red 2017 05 15 13 00 00 2 91 55555 B
  • 更改列时快速删除并重新创建多个索引、视图、统计信息

    我的 项目 表中有一个 StoreNumber 列 我想将其更改为 NOT NULL 我最近清理了所有旧数据 以便不存在空条目 但是 当我执行以下语句时 由于对各种视图 索引和统计信息的多重依赖 它失败了 ALTER TABLE Proje

随机推荐