我有一个SSIS(2012)软件包,到目前为止有16个(c#)脚本任务,还有更多。我不得不基本上为每个组件复制代码。我有一个.cs文件,我添加到每个脚本任务,但如果我更新'常见'代码,我将其复制到dtsx我必须修改包含它的所有其他组件。
我试图创建一个外部程序集,所以我可以将它放入GAC并避免这种愚蠢,但我无法让它工作 - 问题似乎是我的公共代码需要引用InheritedVariableDispenser才能工作。我已经尝试在外部程序集中添加对Microsoft.SqlServer.Dts.Runtime的引用以便处理这个问题,但正如我所说,这会失败。
部分解决方案是使用预先加载的常用例程创建自定义脚本任务,但这似乎也不可能
我的最后一个选择是编写一个直接作用于dtsx文件的程序,并修改xml以更新包含公共代码的所有部分。虽然这对我的黑客很有吸引力,但它确实有点像太多的工作而且有点“不确定” - 它只会解决更新问题,同时仍然不允许在另一个包中重复使用。
如果有人知道如何重用引用SSIS对象的代码,我将是最感兴趣的!
答案 0 :(得分:0)
您的公共代码是否真的需要访问完整的VariableDispenser
对象,或仅访问变量?
如果您只需要变量本身,那么我建议将公共代码放在外部程序集中。使用脚本组件来使用公共代码功能; e.g:
var foo = new MyLogic();
Dts.Variables["TransmogrifyResult"].Value = foo.Transmogrify(Dts.Variables["AnInput"].Value, Dts.Variables["AnotherInput"].Value);
如果您绝对必须有权访问VariableDispenser
本身,则MSDN VariableDispenser文档会警告您实际上可能需要使用IDTSVariableDispenser100。