Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Runtime error Exception has been thrown by the target of an invocation" from Script task

I have a SSIS package with a script task, I get the following error when i try to run it in my local system. It works fine for my collegues as well as in production. However, I am not able to run it locally, to test. I keep a debug point in the main method, but it is never reached, I get the error before it goes to main method.

enter image description here

I am using VS 2010, .Net framework 4.5.

The script task does compile. I get the following messages SSIS package "..\Test.dtsx" starting. Error: 0x1 at Test: Exception has been thrown by the target of an invocation. Task failed: Test SSIS package "..\Test.dtsx" finished: Success. The program '[2552] DtsDebugHost.exe: DTS' has exited with code 0 (0x0).

The following is the code:

public void Main()
{
try
{
 LogMessages("Update Bug package execution started at :: " + DateTime.Now.ToLongTimeString());
 LogMessages("Loading package configuration values to local variables.");

strDBConn = Dts.Variables["User::DBConnection"] != null ? Dts.Variables["User::DBConnection"].Value.ToString() : string.Empty;
strTPCUrl = Dts.Variables["User::TPCUrl"] != null ? Dts.Variables["User::TPCUrl"].Value.ToString() : string.Empty;

TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl));
WorkItemStore objWIS = new WorkItemStore(objTPC);
WorkItemCollection objWIC = objWIS.Query("SELECT...");

foreach (WorkItem wi in objWIC)
{
}

}
catch(Exception ex)
{
}

When I commented the code from TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl)); The script executes successfully. However, if i keep TfsTeamProjectCollection objTPC = new TfsTeamProjectCollection(new Uri(strTPCUrl)); and comment the rest, i get the exception. I do have access to the URL.

I am using Microsoft.TeamFoundation.Client.dll and Microsoft.TeamFoundation.WorkItemTracking.Client.dll, in my script task. However the dll version in the package is 10.0, and the version of the dll in my GAC is 12.0. Would that cause a problem?

like image 353
perplexedDev Avatar asked Mar 11 '15 21:03

perplexedDev


People also ask

What does exception has been thrown by the target of an invocation mean?

The Exception “thrown by the target of invocation” indicated that an error has occurred in code called by using invoke through dot net reflection. This technique is common when you have plug-ins (like scheduled jobs in EPiServer) and other late binding in run-time.


2 Answers

This is just a different situation and not intended to be the end all be all solution for everyone.

When I was installing my DLLs into the GAC I forgot to run my script as Administrator and the script ran silently without error as though it was working.

I felt really dumb when I realized that's what I did wrong. Hopefully this can help prevent other people from wasting time on something so silly.

For reference this is what I use for installing my DLLs into the GAC and I modified it to tell me when I am not running it as Administrator now:

#https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator
$isAdmin = ([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if($isAdmin -eq $false)
{
    Write-Host "You have to run this script as Administrator or it just won't work!" -ForegroundColor Red

    return;
}

$strDllPath = "C:\PathToYourDllsHere\"

#Note that you should be running PowerShell as an Administrator
[System.Reflection.Assembly]::Load("System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")            
$publish = New-Object System.EnterpriseServices.Internal.Publish            


$arr = @(
    "YourDLL01.dll",
    "YourDLL02.dll",
    "YourDLL03.dll"
)

get-date

foreach($d in $arr)
{
    $p = ($strDllPath + $d);

    $p

    $publish.GacInstall($p);
}

#If installing into the GAC on a server hosting web applications in IIS, you need to restart IIS for the applications to pick up the change.
#Uncomment the next line if necessary...
#iisreset

Credit for how to determine if your PowerShell script is running in Admin mode or not: https://superuser.com/questions/749243/detect-if-powershell-is-running-as-administrator

like image 78
dyslexicanaboko Avatar answered Sep 21 '22 08:09

dyslexicanaboko


I got this error message when I referred to a passed ssis variable in Dts.Variables["User::xxxx].Value(); where xxxx did not exist and was not passed from the calling program. It was a simple Console.Writeline referring to a passed variable that didn't exist.

like image 34
renaissanceMan Avatar answered Sep 21 '22 08:09

renaissanceMan