4

Microsoft Shell Controls And AutomationSSISスクリプトタスク内からCOMオブジェクトライブラリ(C:\ Windows \ System32 \ shell32.dll)を使用して.zipアーカイブを操作しようとしています。

残念ながら、関連するリファレンスを正常に追加しましたが、スクリプトタスクは正常にコンパイルされます。私はVB.NETを使用しています。ライブラリ内で定義されたオブジェクトを作成しようとするとすぐに、次のランタイムエラーが発生します。

エラー:アーカイブファイルの0x1:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.IO.FileNotFoundException:ファイルまたはアセンブリ'Interop.Shell32、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。ファイル名:'Interop.Shell32、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null' at ST_a2650b7f39504eaa8c80e37a6736d957.vbproj.ScriptMain.Main()

Interop DLLはすべて私に代わって処理されると思いましたが、私がどのステップを見逃しているのか誰か知っていますか?

4

1 に答える 1

3

SSISでは、すべての.dll参照をGACに登録する必要があります。正解です。

このdllをGACにインストールすることに関してさまざまなオプションがあります。

  1. .dllを%windir%\assembly\フォルダーにドラッグアンドドロップします。

  2. 使用を検討しているgacutil.exeを使用します。gacutilを使用したGACへのインストールに関しては、Global_Assembly_Cacheに役立つ情報がたくさんあります。基本的に、.NET Frameworkがインストールされている場合(VB.NETを使用しているため、問題はありません)、Microsoft.NETフォルダーにgacutil.exeがあります。

  3. (他のすべてが失敗したときに私が通常使用するもの)VisualStudioでこれらすべてを自動的に実行するWindowsMSIプロジェクトを作成します。ここで役立つ情報MSIを使用してGACにアセンブリをインストールする方法

その.dllをGACにインストールしても問題が解決しない場合は、別のオプションとして、必要なzipファイルを操作するためのロジックを含む別のVisual Studioプロジェクトを実際に作成してビルドし、プロセスの実行タスクを使用してSSISからexeを呼び出します。 。SSISパッケージで指定された引数を渡すことができます。あまりエレガントではありませんが、SSISの使用に熱心であれば、それで作業は完了します。


アップデート:

この質問の解決策は、SSISスクリプトタスクCOMException/FileNotFoundExceptionエラーのトリックを実行しました。問題は、dllの署名付き参照を追加することでした。この回答は、SSISスクリプトタスク内にCOM参照を追加するための適切なステップバイステップの回避策を提供します。

于 2012-10-30T12:44:53.067 に答える