Differences

This shows you the differences between the selected revisions of the page.

library_ssis 2019-07-11 library_ssis 2022-12-08 (current)
Line 2: Line 2:
===== [[installing]] Installing ===== ===== [[installing]] Installing =====
-First, you need to [[library_install|install the WinSCP .NET assembly]].+First, you need to [[library_install|download the WinSCP .NET assembly]]. Do not use the NuGet package.((See [[https://stackoverflow.com/q/55457058/850848|How to fix NuGet WinSCP.NET in SSIS Script Task?]]))
-You also need to [[library_install#gac|install the assembly to the GAC]] or [[#subscribe|subscribe ''AppDomain.AssemblyResolve'' event]] to allow loading the assembly.+You also need to [[library_install#gac|install the assembly to the GAC]] or [[#subscribe|subscribe ''AppDomain.AssemblyResolve'' event]] in your code to allow loading the assembly.
-===== Using from SSIS =====+===== [[using]] Using from SSIS =====
You use WinSCP .NET assembly from SSIS as any other .NET assembly: You use WinSCP .NET assembly from SSIS as any other .NET assembly:
  * In Microsoft Visual Studio, in your "Integration Services Project", choose your "SSIS Package" (e.g. the default ''Package.dtsx'');   * In Microsoft Visual Studio, in your "Integration Services Project", choose your "SSIS Package" (e.g. the default ''Package.dtsx'');
Line 15: Line 15:
  * Use //Project > Add Reference > Browse// to add reference to ''winscpnet.dll'';   * Use //Project > Add Reference > Browse// to add reference to ''winscpnet.dll'';
  * Place your C# or VB.NET code into ''ScriptMain.Main'' method (see the example below);   * Place your C# or VB.NET code into ''ScriptMain.Main'' method (see the example below);
 +  * If you have chosen the GAC approach, you need to [[library_install#installing|set ''Session.ExecutablePath'']]. Alternatively, [[#subscribe|subscribe ''AppDomain.AssemblyResolve'' event]].
  * Close Visual Studio of the script project. Close //Script Task Editor// with //OK// button.   * Close Visual Studio of the script project. Close //Script Task Editor// with //OK// button.
Line 53: Line 54:
                using (Session session = new Session())                 using (Session session = new Session())
                {                 {
-                    // As WinSCP .NET assembly has to be stored in GAC to be used with SSIS, +                    // If WinSCP .NET assembly has been stored in GAC to be used with SSIS, 
-                    // you need to set path to WinSCP.exe explicitly, +                    // you need to set path to WinSCP.exe explicitly. 
-                    // if using non-default location.+                    // This is not needed if you have subscribed AppDomain.AssemblyResolve event 
 +                    // and the WinSCP.exe is in the same location as WinSCPnet.dll.
                    session.ExecutablePath = @"C:\winscp\winscp.exe";                     session.ExecutablePath = @"C:\winscp\winscp.exe";
Line 98: Line 100:
===== [[subscribe]] Subscribing AppDomain.AssemblyResolve ===== ===== [[subscribe]] Subscribing AppDomain.AssemblyResolve =====
-If you do not want to [[library_install#gac|install the assembly to the GAC]], you can instead subscribe ''[[dotnet>system.appdomain.assemblyresolve|AppDomain.AssemblyResolve]]'' event in a static constructor handler of the script task class to locate the assembly in an another location. For details, see article [[https://blogs.msdn.microsoft.com/dbrowne/2014/06/25/how-to-load-an-assembly-in-a-ssis-script-task-that-isnt-in-the-gac/|How to load an Assembly in a SSIS script task that isn't in the GAC]].+If you do not want to [[library_install#gac|install the assembly to the GAC]], you can instead subscribe ''[[dotnet>system.appdomain.assemblyresolve|AppDomain.AssemblyResolve]]'' event in a static constructor of the script task class, to locate the assembly in another location. For details, see article [[https://learn.microsoft.com/en-us/archive/blogs/dbrowne/how-to-load-an-assembly-in-a-ssis-script-task-that-isnt-in-the-gac|How to load an Assembly in a SSIS script task that isn't in the GAC]].
<code csharp> <code csharp>
using System; using System;
 +using System.IO;
 +using System.Reflection;
using Microsoft.SqlServer.Dts.Runtime; using Microsoft.SqlServer.Dts.Runtime;
using Microsoft.SqlServer.Dts.Tasks.ScriptTask; using Microsoft.SqlServer.Dts.Tasks.ScriptTask;

Last modified: by martin