C# SSIS 2012:是否可以将对包对象的引用传递给外部程序集?

C# SSIS 2012:是否可以将对包对象的引用传递给外部程序集?,c#,sql-server,ssis,C#,Sql Server,Ssis,我有一个SSIS(2012)包,到目前为止,它有16个(c#)脚本任务,而且还会有更多。我对基本上必须为每个组件复制代码感到沮丧。我有一个.cs文件,我将其添加到每个脚本任务中,但由于该文件被复制到dtsx中,如果我更新“通用”代码,我必须修改包含该文件的所有其他组件。 我曾尝试创建一个外部程序集,以便将其放入GAC并避免这种愚蠢行为,但我无法使其正常工作-问题似乎是我的公共代码需要对InheritedVariableDispenser的引用才能正常工作。我尝试在外部程序集中添加对Microso

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

如果有人知道如何重用引用SSIS对象的代码,我将非常感兴趣

您的通用代码真的需要访问完整的
variablepender
对象,还是只需要访问变量

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

var foo = new MyLogic();
Dts.Variables["TransmogrifyResult"].Value = foo.Transmogrify(Dts.Variables["AnInput"].Value, Dts.Variables["AnotherInput"].Value);
如果您绝对必须访问
VariableDispenser
本身,MSDN文档警告您实际上可能需要使用