gpt4 book ai didi

c# - SSIS 2012 : is it possible to pass references to Package Objects to an external assembly?

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:48 27 4
gpt4 key购买 nike

我有一个 SSIS (2012) 包,到目前为止有 16 个 (c#) 脚本任务,而且还会有更多。我对必须基本上为每个组件复制代码感到沮丧。我有一个 .cs 文件,我将其添加到每个脚本任务中,但是如果我更新“通用”代码,它会被复制到 dtsx 中,所以我必须修改包含它的所有其他组件。
我试图创建一个外部程序集,以便我可以将它放入 GAC 中并避免这种愚蠢行为,但我无法让它工作 - 问题似乎是我的通用代码需要引用 InheritedVariableDispenser 才能工作。我曾尝试在外部程序集中添加对 Microsoft.SqlServer.Dts.Runtime 的引用以处理此问题,但正如我所说,这失败了。
部分解决方案是创建一个自定义的脚本任务,并预加载我的常用例程,但这似乎也不可能。
我的最后一个选择是编写一个直接作用于 dtsx 文件并修改 xml 以更新所有包含公共(public)代码的部分的程序。虽然这对我的黑客很有吸引力,但它做的工作有点太多,有点“不确定”——它只会解决更新问题,但仍然不允许在另一个包中重复使用。
如果有人知道如何重用引用 SSIS 对象的代码,我将非常感兴趣!

最佳答案

您的公共(public)代码真的需要访问完整的 VariableDispenser 对象,还是只需要访问变量?

如果您只需要变量本身,那么我建议将公共(public)代码放在外部程序集中。使用脚本组件来使用通用代码功能;例如:

var foo = new MyLogic();
Dts.Variables["TransmogrifyResult"].Value = foo.Transmogrify(Dts.Variables["AnInput"].Value, Dts.Variables["AnotherInput"].Value);

如果您绝对必须有权访问VariableDispenser 本身,MSDN VariableDispenser文档警告您实际上可能需要使用 IDTSVariableDispenser100反而。

关于c# - SSIS 2012 : is it possible to pass references to Package Objects to an external assembly?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382076/

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