我使用 EPPlus.dll 库动态生成Excel文件以进行附件,并在SSIS包的脚本任务中生成邮件程序。
当邮件程序中有新的更改要求时,我会在本地计算机上执行脚本任务更改,并将构建的包文件(.dtsx)发送给DBA团队进行部署。
现在每次我都要请DBA团队与我分享生产服务器屏幕我在哪里:
然后,他们从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的服务器上部署包文件的正确/最佳实践方法是什么。
答案 0 :(得分:6)
我认为从集成服务包中有直接的方法可以做到这一点,因为您可以做的唯一解决方法是 - (使用CurrentDomain_AssemblyResolve
函数完成的工作)< / em> - 从某个位置加载程序集,而不是将其安装到GAC中。
有三种方法可以在部署时使用自定义dll:
AssemblyResolve
函数C:\Program Files\Microsoft SQL Server\100\DTS\Binn
)以及.Net框架程序集文件夹。如果问题是要求屏幕共享,您可以创建一个小型安装向导,将这些dll复制到特定位置,并要求dba团队执行它。
解决方法强>
在搜索此问题时,我通过使用Web服务而不是直接dll找到了一个有趣的解决方法,因此您可以创建包含您正在使用的方法的Web服务并添加Web引用而不是本地程序集
旁注:我之前没有尝试过此方法,但我只是想帮助
有用的链接&amp;参考强>