2

これまでに 16 個の (c#) スクリプト タスクを含む SSIS (2012) パッケージがあり、さらに増える予定です。コンポーネントごとに基本的にコードをコピーする必要があることに不満を感じています。各スクリプト タスクに追加する .cs ファイルがありますが、「共通」コードを更新すると dtsx にコピーされるため、それを含む他のすべてのコンポーネントを変更する必要があります。
外部アセンブリを作成して GAC に配置し、この愚かさを回避できるようにしようとしましたが、動作させることができません。問題は、共通コードが動作するために InheritedVariableDispenser への参照が必要であるようです。これを処理するために、外部アセンブリに Microsoft.SqlServer.Dts.Runtime への参照を追加しようとしましたが、私が言うように、これは失敗します。
部分的な解決策は、共通ルーチンをプリロードしてカスタマイズしたスクリプト タスクを作成することですが、これも不可能のようです。
私の最後の代替オプションは、dtsx ファイルに直接作用し、xml を変更して、共通コードを組み込んだすべてのセクションを更新するプログラムを作成することです。これは私のハッカーには魅力的ですが、少し手間がかかりすぎて少し「不自然」です。更新の問題を解決するだけで、別のパッケージでの再利用は許可されません。
SSIS オブジェクトを参照するコードを再利用する方法を誰かが知っていれば、私は最も興味があります!

4

1 に答える 1

0

あなたの共通コードは本当にVariableDispenserオブジェクト全体へのアクセスを必要としますか、それとも単に変数へのアクセスを必要としますか?

変数自体のみが必要な場合は、共通コードを外部アセンブリに配置することをお勧めします。スクリプト コンポーネントを使用して、共通のコード機能を使用します。例えば:

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

絶対にそれ自体にアクセスする必要がある場合は、代わりにIDTSVa​​riableDispenser100を実際に使用する必要がある可能性があることをVariableDispenserMSDN のVariableDispenserドキュメントで警告しています。

于 2012-11-14T23:28:23.977 に答える