4

C# 2012 スクリプト タスクを含む SSIS パッケージ (VS 2013 で作成) があります。

スクリプト タスクの仕事は、WinSCP .NET アセンブリを使用して SFTP サーバーからファイルをダウンロードし、サーバー (Windows Server 2012 R2 と SQL Server 2014) に配置することです。

パッケージを開発マシンで実行すると問題なく動作しますが、サーバーにデプロイすると、このタスクでパッケージが失敗し、エラー メッセージが表示されます

呼び出しのターゲットによって例外がスローされました

ここに画像の説明を入力

掘り下げてみましたが、への参照と関係があるようWinSCPnet.dllです。

4

3 に答える 3

2

WinSCP の記事を引用すると、呼び出しのターゲットによって例外がスローされました

これは単なる高レベルの例外です。根本原因は通常、InnerException.

SSIS でこの例外が発生している場合は、SSIS から WinSCP .NET アセンブリを使用tryする例に示すように、 …catchブロックを使用してエラーをキャプチャできます。

内部例外に簡単にアクセスできない場合は、WinSCP セッション ログとデバッグ ログ ファイルを調べます ( Session.SessionLogPathSession.DebugLogPath)。これらのファイルが作成されていない場合、根本的な原因はWinSCPnet.dllアセンブリのロードである可能性があります。ファイルまたはアセンブリ 'file:///…\WinSCPnet.dll' またはその依存関係の 1 つを読み込めませんでしたを参照してください。システムは、指定されたファイルを見つけることができません。.


アセンブリをインストールしてロードできるようにする方法については、「 SQL Server Integration Services (SSIS) からの WinSCP .NET アセンブリの使用」の「インストール」セクションで説明されています。

インストール

まず、WinSCP .NET アセンブリをインストールする必要があります。NuGet パッケージは使用しないでください。1

また、アセンブリを GACまたはサブスクライブAppDomain.AssemblyResolveイベントにインストールして、アセンブリの読み込みを許可する必要があります。


GACへのインストールは、WinSCP .NET アセンブリのインストール手順の GAC へのインストール セクションで説明されています

GACへのインストール

特殊なケースでは、特にSSISからアセンブリを使用するために、グローバル アセンブリ キャッシュ (GAC) にアセンブリをインストールする必要がある場合があります。

アセンブリを GAC にインストールするときは、WinSCP 実行可能ファイルへのパスを構成する必要があります。

開発機について

アセンブリを開発マシン ( Windows SDKがインストールされているマシン) の GAC にインストールするには、次のコマンドを使用します。

gacutil.exe /i WinSCPnet.dll

Windows SDK には Microsoft Visual Studio が付属しています。個別にインストールすることもできます。

gacutil.exeお使いのバージョンの .NET フレームワークに適したものを使用してください。

  • .NET Framework 4.0 以降の場合はgacutil、Windows SDK 7.1 (またはそれ以降) から使用します
    C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin\gacutil.exe
  • .NET Framework 3.5 の場合はgacutil、Windows SDK 6.0 から使用します。
    C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bin\gacutil.exe

本番またはユーザーのマシン上

実稼働マシンまたはユーザーのマシンでアセンブリを GAC にインストールするには、次の方法でアセンブリを GAC にインストールできます。

  • .msiパッケージを作成することによる Windows インストーラー。

  • Inno Setupなど、GAC へのインストールをサポートするその他のインストーラー システム。

  • System.EnterpriseServices.Internal.Publish.GacInstall方法。PowerShell の例:

    Add-Type -AssemblyName "System.EnterpriseServices"
    $publish = New-Object System.EnterpriseServices.Internal.Publish
    $publish.GacInstall("WinSCPnet.dll")
    

    DLL への絶対パスを指定する必要があり、管理者権限が必要です。そうしないと、上記の方法は失敗します (失敗の唯一の兆候が Windows イベント ログに送信されます)。


  1. SSIS スクリプト タスクで NuGet WinSCP.NET を修正する方法を参照してください。
于 2015-12-18T06:15:01.550 に答える
1

この依存関係を取得するには、SSIS のグローバル アセンブリ キャッシュに WinSCPnet.dll をインストールする必要があります。詳細については、このブログを参照してください。次の手順を使用して GAC に DLL をインストールできます。詳細については、ドキュメントを参照してください。

  1. WinSCPnet アセンブリをローカル コンピューターのフォルダーにコピーします。Visual Studio コマンド プロンプトを起動します。
  2. 次のコマンドを入力します: gacutil.exe /if ""
  3. これにより、アセンブリが GAC にインストールされ、同じアセンブリ名を持つ既存のアセンブリが上書きされます。
于 2015-12-17T22:08:59.453 に答える