我有一个SSIS包(在VS 2013中创建),其中包含C#2012脚本任务。

脚本任务的工作是使用WinSCP .NET程序集从SFTP服务器下载文件并将其放置在我的服务器上(带有SQL Server 2014的Windows Server 2012 R2)

当我在Dev计算机上运行它时,我的程序包运行良好,但是当我将其部署到服务器时,我的程序包在此任务中失败,并显示错误消息


  调用的目标已引发异常


sql-server - 从SQL Server代理运行时,引用WinSCPnet.dll的SSIS C#2012脚本任务失败,并显示“调用的目标已引发异常”-LMLPHP

我已经进行了一些挖掘,看起来它与对WinSCPnet.dll的引用有关。

最佳答案

Exception has been thrown by the target of an invocation上引用WinSCP文章:


  这只是一个高级例外。根本原因通常存储在InnerException中。
  
  如果在SSIS中遇到此异常,则可以使用try…块捕获错误,如using WinSCP .NET Assembly from SSIS的示例所示。
  
  如果无法轻松访问内部异常,请检查WinSCP会话日志并调试日志文件(catchSession.SessionLogPath)。如果没有创建这些文件,则根本原因可能是加载Session.DebugLogPath程序集。请参见Could not load file or assembly ‘file:///…\WinSCPnet.dll’ or one of its dependencies. The system cannot find the file specified.




Installing section of Using WinSCP .NET Assembly from SQL Server Integration Services (SSIS)中介绍了如何安装组件以允许其加载:


  正在安装
  
  首先,您需要安装WinSCP .NET assembly
  
  您还需要install the assembly to the GACsubscribe WinSCPnet.dll event允许加载程序集。




Installing to GAC section of Installation instructions for WinSCP .NET assembly涵盖了到GAC的安装:


  安装到GAC
  
  在特殊情况下,您可能需要将程序集安装到全局程序集缓存(GAC)中,尤其是要从SSIS使用它。
  
  将程序集安装到GAC时,需要configure a path to WinSCP executable
  
  在开发机器上
  
  要将程序集安装到开发计算机上的GAC中,即已安装Windows SDK的程序集,请使用以下命令:
  
  

gacutil.exe /i WinSCPnet.dll

  
  Windows SDK随Microsoft Visual Studio一起提供。您也可以单独安装。
  
  对您的.NET Framework版本使用正确的AppDomain.AssemblyResolve
  
  
  对于.NET Framework 4.0或更高版本,请使用Windows SDK 7.1(或更高版本)中的gacutil.exe
  gacutil;
  对于.NET Framework 3.5,请使用Windows SDK 6.0中的C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\bin\gacutil.exe
  gacutil
  
  
  在生产或用户机器上
  
  要将程序集安装到生产或用户计算机上的GAC中,可以使用以下方法将程序集安装到GAC中:
  
  
  Windows Installer,通过创建C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bin\gacutil.exe包;
  支持安装到GAC的任何其他安装程序系统,例如Inno Setup;
  .msi method。 PowerShell示例:
  
  
Add-Type -AssemblyName "System.EnterpriseServices"
$publish = New-Object System.EnterpriseServices.Internal.Publish
$publish.GacInstall("WinSCPnet.dll")

  
  必须指定DLL的绝对路径,否则上述方法将失败(并且唯一的失败指示发送到Windows事件日志)。

关于sql-server - 从SQL Server代理运行时,引用WinSCPnet.dll的SSIS C#2012脚本任务失败,并显示“调用的目标已引发异常”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56734436/

10-13 08:23